LeetCode.389. 找不同

给定两个字符串 s 和 t,它们只包含小写字母。

字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。

请找出在 t 中被添加的字母。

示例:

输入:
s = “abcd”
t = “abcde”
输出:
e
解释:
‘e’ 是那个被添加的字母。

分析:
题解一:
常规解法,开数组存第一个字符串对应字符个数,再减去第二个字符串对应字符,剩下的一个就是解

class Solution {
    public char findTheDifference(String s, String t) {
        int[] ans = new int[26];
        for (int i = 0; i < s.length(); i++) {
            ans[s.charAt(i) - 'a']++;
        }
        for (int i = 0; i < t.length(); i++) {
            ans[t.charAt(i) - 'a']--;
        }
        for (int i = 0; i < ans.length; i++) {
            if (ans[i] < 0)
                return (char) (i + 'a');
        }
        return ' ';
    }
}

题解二:
利用异或的性质,详情见:136. 只出现一次的数字
异或完,剩下的数就是答案,异或运算比前面快一丢丢

 int ans = 0;
        for (char c : s.toCharArray()) {
            ans ^= c;
        }
        for (char c : t.toCharArray()) {
            ans ^= c;
        }
        return (char) ans;

题解三:
既然异或可以,那么加减也是可以的对吧?最快了
(仔细考虑是否真的可行?)

class Solution {
    public char findTheDifference(String s, String t) {
        int ans = 0;
        for (char c : s.toCharArray()) {
            ans -= c;
        }
        for (char c : t.toCharArray()) {
            ans += c;
        }
        return (char) ans;
    }
}

猜你喜欢

转载自blog.csdn.net/liyuanyue2017/article/details/81215582
今日推荐