[字符串]leetcode389:找不同(easy)

题目:
在这里插入图片描述
题解:

  • 题目比较简单,直接看代码及注解即可。

代码如下:

class Solution {
public:
    //题解1:统计字符串s和t的26个字母的个数,然后遍历26个字母,返回不同数量的字母
    char findTheDifference_1(string s, string t) {
        int count_s[26],count_t[26];
        memset(count_s,0,sizeof(count_s));
        memset(count_t,0,sizeof(count_t));
        for(char& c:s)count_s[c-'a']++;
        for(char& c:t)count_t[c-'a']++;
        for(int i=0;i<26;++i){
            if(count_s[i]!=count_t[i])
                return 'a'+i;
        }
        return 'a';
    }

    //题解2:异或,a^a=0,a^0=a
    char findTheDifference_2(string s,string t){
        int res=0,n=s.size();
        for(int i=0;i<n;++i){
            //注意assic码整形提升为相对应的10进制数了,所以最后结果要转换为assic码
            res^=s[i];
            res^=t[i];
        }
        res^=t[n];
        return char(res);
    }

    //题解3:相减
    char findTheDifference_3(string s,string t){
        int res=0;
        //由于t比s多一位,所以s用减,t用加
        for(char c:s)res-=c;
        for(char c:t)res+=c;
        //最后结果要转换为对应的assic码
        return char(res);
    }

    //题解4:对两个字符串排序之后,相对应的位比较assic码即可
    char findTheDifference(string s,string t){
        sort(s.begin(),s.end());
        sort(t.begin(),t.end());
        for(int i=0;i<s.size();++i){
            if(s[i]!=t[i])return t[i];
        }
        return t.back();
    }
};
发布了512 篇原创文章 · 获赞 175 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_43152052/article/details/104150026