389:找不同

问题描述

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

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

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

示例

输入:
s = "abcd"
t = "abcde"

输出:
e

解释:
'e' 是那个被添加的字母。

思路

用s建立一个hash表, key为字符,value为出现次数。 用t对这个hash进行反计数。如果某个字符反计数到-1,那么返回这个字符(这就是多出来的)。(方法一)

用异或也可以。字符本质上也是数字。直接异或即可。因为s和t中只有一个字符不同,所以这题目成了找不同。而且利用任何数与0异或都不变的特性,把res初始化为0. (方法二)

方法一

public char findTheDifference(String s, String t) {
        int[] arr = new int[26];
        for(char c:s.toCharArray()){
            arr[c-'a']++;
        }
        for(char c:t.toCharArray()){
            if(arr[c-'a'] < 1){
                return c;
            }
            arr[c-'a']--;
        }
        return 'a';
    }

方法二

public char findTheDifference1(String s, String t) {
        int res = 0;
        for(int i = 0; i < s.length(); i++){
            res ^= s.charAt(i)^t.charAt(i);
        }
        res ^= t.charAt(s.length());
        return (char)res;
    }
发布了396 篇原创文章 · 获赞 22 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41687289/article/details/104915074