LeetCode-找不同
给定两个字符串 s 和 t ,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例 1:
输入:s = "abcd", t = "abcde"
输出:"e"
解释:'e' 是那个被添加的字母。
示例 2:
输入:s = "", t = "y"
输出:"y"
提示:
0 <= s.length <= 1000t.length == s.length + 1s和t只包含小写字母
这个有个很大的坑,他的s的长度有可能会很长,相信有很多同学都会跟我一样,陷入其中
一起来康康这是个什么坑
/**
* @param {string} s
* @param {string} t
* @return {character}
*/
var findTheDifference = function(s, t) {
let res =''
if(!s.length) return t
t.split('').forEach(item=>{
s.split('').forEach(i=>{
if(i!==item) res = item
})
})
if(!res.length) return t[t.length-1]
return res
};
一开始,并没注意到他的这个提示,认为可能就短短的几个字符串,然后去切割长的那个,去遍历找短的字符串中,哪个是长字符串中独有的,就把这个返回
前几个测试用例还能通过,没想到,有个测试用例,一大长串的字符串,突然意识到,他可能24个英文字母,每个都有可能出现,那这种解法,就没办法完成了
于是,打算用映射表的方式,来处理这个
/**
* @param {string} s
* @param {string} t
* @return {character}
*/
var findTheDifference = function(s, t) {
let map = {}
let map1 = {}
s.split('').forEach(item=>{
if(map[item] !== undefined){
map[item] += 1
}else{
map[item] = 0
}
})
t.split('').forEach(item=>{
if(map1[item] !== undefined){
map1[item] += 1
}else{
map1[item] = 0
}
})
let res = ''
for(let i in map1){
if(map1?.[i] !== map?.[i]){
res = i
}
}
return res
};
两个字符串都转成数组,把每个字母出现的次数做一个统计,在统计完之后,对比两个映射表的不同,题目中提到随机位置添加一个字母,那么就只会有一个字母出现的数量不同,将两个表进行对比,不同的这个,就是随机添加的这个.
看了一下他们的题解,似乎都要进行两次循环,有没有什么方法,能够尽可能的减少循环, 评论区聊聊吧!