美文网首页lintcode
702. 连接两个字符串中的不同字符

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

作者: 和蔼的zhxing | 来源:发表于2017-11-24 22:49 被阅读19次

    连接两个字符串中的不同字符。
    给出两个字符串, 你需要修改第一个字符串,将所有与第二个字符串中相同的字符删除, 并且第二个字符串中不同的字符与第一个字符串的不同字符连接。
    样例
    给出 s1 = aacdb, s2 = gafd
    返回 cbgf
    给出 s1 = abcs, s2 = cxzca;
    返回 bsxz
    c++11中规定字符串可以直接相加,字符串对象可以加字符串常量,可以加字符。
    string::find()函数很好用,这里恰好可以做一个总结:
    共有下面四种函数原型:
    四种函数原型返回值都是size_t,即字符串的一个索引,如果找到返回索引,如果找不到返回-1,即string::npos,打印出来是:4294967295。直接用npos就可以了。

    string (1)     //可以直接查找字符串对象,
    size_t find (const string& str, size_t pos = 0) const noexcept;
    c-string (2)    //从类型的字符串
    size_t find (const char* s, size_t pos = 0) const;
    buffer (3)       //从pos开始查找s的前n个字符
    size_t find (const char* s, size_t pos, size_type n) const;
    character (4)    //查找字符
    size_t find (char c, size_t pos = 0) const noexcept;
    

    我们这里用的是最后一个,定义一个新的string对象res,然后先遍历s1,在s2中寻找s1的每个字符,找不到的话就把这个字符加到res上,然后对s2做同样的操作,就能找到s2中和s1不同的字符了,这样最后加起来就只最终的res。

    string concatenetedString(string &s1, string &s2) {
            string res;
            if(s2.size()==0)
            return s1;
            if(s1.size()==0)
            return s2;
            for(int i=0;i<s1.size();i++)
            {
                if(s2.find(s1[i])==string::npos)
                res+=s1[i];
            }
            for(int i=0;i<s2.size();i++)
            {
                if(s1.find(s2[i])==string::npos)
                res+=s2[i];
            }
            return res;
            // write your code here
        }
    

    over

    相关文章

      网友评论

        本文标题:702. 连接两个字符串中的不同字符

        本文链接:https://www.haomeiwen.com/subject/jvhqbxtx.html