LeetCode 389题 找不同
题目描述:
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 *t* 由字符串 *s* 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
涉及内容:哈希表
示例:
输入:s = "abcd", t = "abcde"
输出:"e"
解释:'e' 是那个被添加的字母。
思路:
对于字符串来说,一个比较好的思路就是将其转化为ASCII码的形式(这个思路在其他面对字母字符串的时候也可以借鉴考虑一下),之后我们遍历字符串s,为了作为对比,我们将读入的字符串的ASCII减去97(因为a对于的就是97),得到索引值,然后将索引值-1(这里-1 -2 +1 都行 只是为了方便和索引区别开)存入到哈希表中。之后遍历字符串t,与上述遍历同样的方法,只不过这里我们将索引值+1存入(反正就是和遍历s时互反就好了)。最后我们只需要遍历哈希表里面的值,若为1则是所添加的字母(因为本题只添加了一个多的元素,所以添加的那个哈希表的value必为1)
提交结果:
完整代码:
class Solution:
def findTheDifference(self, s: str, t: str) -> str:
if len(s)==0:
return t
table=[0]*26
for i in range(len(t)):
if i <len(s):
table[ord(s[i])-ord('a')]-=1
table[ord(t[i])-ord('a')]+=1
for i in range(26):
if table[i]!=0:
return chr(i+97)
其他思路:
首先将两个字符串合并为a
在a中遍历,如果出现奇数次的字符即为不同的字符