这是我参与8月更文挑战的第31天,活动详情查看:8月更文挑战
相关文章
LeetCode刷题汇总:LeetCode刷题
一、题目描述
给定两个字符串 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"
-
提示:
0 <= s.length <= 1000 t.length == s.length + 1 s 和 t 只包含小写字母
-
又是找不同,,现在看到这种题目第一反应就是使用hash来实现。但是!我不用!
-
默默的想起来另一种笨比方法。
-
既然第二个字符只比第一个字符多一个。
-
那么我将第一个的所有字符在第二个字符中替换掉,那么剩下的那个不就是多出来的那个了嘛!
-
哈哈哈,机制如我。
三、AC 代码
-
替换破解:
class Solution { public char findTheDifference(String s, String t) { //将其转成字符数组,方便遍历 String[] strArr = s.split(""); for (int i=0;i<strArr.length;i++){ //因为有可能第二个增加的字符串会重复,所以这里使用replaceFirst只替换第一个字符 t = t.replaceFirst(strArr[i],""); } return t.toCharArray()[0]; } }
- 啧啧啧,虽然效率不忍直视,但是操作还是蛮骚的嘛!
-
位运算破解:
-
上面的骚操作效率较低,下面就来通过异或来解决本题。
-
什么?这题还可以用异或?
-
原来是因为t只比s多了一个字母。
-
那么我们将两个字符串拼接起来,那么字符出现奇数次的肯定就是多了的那个字符呀!
class Solution { public char findTheDifference(String s, String t) { char res = 0; for (char c: s.toCharArray()) { res ^= c; } for (char c: t.toCharArray()) { res ^= c; } return res; } }
- 瞬间起飞!
四、总结
路漫漫其修远兮,吾必将上下求索~
如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧~hahah