前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >连接两个字符串中的不同字符

连接两个字符串中的不同字符

作者头像
一份执着✘
发布2018-06-04 17:20:57
2.2K0
发布2018-06-04 17:20:57
举报
文章被收录于专栏:赵俊的Java专栏

题意

给出两个字符串, 你需要修改第一个字符串,将所有与第二个字符串中相同的字符删除, 并且第二个字符串中不同的字符与第一个字符串的不同字符连接

样例

给出 s1 = aacdb, s2 = gafd 返回 cbgf 给出 s1 = abcs, s2 = cxzca 返回 bsxz

思路

本题我采用了牺牲空间换时间的方式,空间、时间复杂度为 O(m + n)。

以 s1 = aacdb, s2 = gafd 为例

先将 s2 的每一个字符都放进 Map 集合中,将字符当作键,将值赋为 1,此时 Map 集合中应为: {"g':1, "a":1, "f":1, "d": 1}.

然后将 s1 的每一个字符依次判断是否存在与 Map 集合的 Key 中,如果相等则将 集合中该 Key 的值变为 2,如果不相等,则将结果加入到字符串缓冲区中。

进行完这一步操作后,Map 集合中应为:{"g':1, "a":2, "f":1, "d": 2},字符串缓冲区中应为 :cb

最后将 s2 再遍历一次,将在 Map 集合中 Value 为 1 的 Key 依次添加到字符串缓冲区中即可。

代码实现

代码语言:javascript
复制
public class Solution {
    /*
     * @param : the 1st string
     * @param : the 2nd string
     * @return: uncommon characters of given strings
     */
    public String concatenetedString(String s1, String s2) {
        StringBuffer sb = new StringBuffer();
        Map<Character, Integer> map = new HashMap<Character, Integer>();
        for (char c : s2.toCharArray()) {
            map.put(c, 1);
        }
        
        for (char c : s1.toCharArray()) {
            if (!map.containsKey(c)) {
                sb.append(c);
            } else {
                map.put(c, 2);
            }
        }
        
        for (char c : s2.toCharArray()) {
            if (map.get(c) != 2) {
                sb.append(c);
            }
        }
        return sb.toString();
    }
}

原题地址

Lintcode:连接两个字符串中的不同字符

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题意
  • 样例
  • 思路
  • 代码实现
  • 原题地址
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档