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