20201218 找不同

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

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

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

 

示例 1:

输入:s = "abcd", t = "abcde"
输出:"e"
解释:'e' 是那个被添加的字母。
示例 2:

输入:s = "", t = "y"
输出:"y"
示例 3:

输入:s = "a", t = "aa"
输出:"a"
示例 4:

输入:s = "ae", t = "aea"
输出:"a"

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-the-difference
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
    public char findTheDifference(String s, String t) {
 
    }
}

 

思路 用两个for循环 去对比 找出不同

class Solution {
    public char findTheDifference(String s, String t) {
        for (int i=0;i<s.length();i++){
            for (int j=0;j<t.length();j++){
                if (s.charAt(i)==t.charAt(j)){
                  t= t.substring(0,j)+t.substring(j+1,t.length());
                  break;//第一次提交时没写 导致("ae","aea")时将"aea"中2个a都删掉了导致报错
                }
            }
         }
            return t.charAt(0);  
    }
}

这串代码效率肯定很低 用时19ms 内存38.8ms 没有优化思路 看评论发现大佬的解题思路

 

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

        for (int i = 0; i < t.length(); i++) {
            cArr[t.charAt(i) - 'a']--;
        }

        for (int i = 0; i < 26; i++) {
            if (cArr[i] == -1) {
                return (char)('a' + i);
            }
        }
        return 'a';
    }

代码思路很清晰

先将变量s的字符串按26字母的顺序存放int[26]中 出现的字符++ 

变量t出现的字符--

多出来的那个字符值是-1

返回即可

用时3ms

posted @ 2020-12-18 11:05  小白小白小白小白  阅读(75)  评论(0编辑  收藏  举报