【题目】
给定两个字符串 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 只包含小写字母
【题解】
class Solution {
/**
* @param String $s
* @param String $t
* @return String
*/
function findTheDifference($s, $t) {
$sLen = strlen($s);
$tLen = strlen($t);
$hash = [];
for($i=0;$i<$sLen;$i++){
$char = substr($s,$i,1);
if(isset($hash[$char])){
$hash[$char]++;
}else{
$hash[$char] = 1;
}
}
for($i=0;$i<$tLen;$i++){
$char = substr($t,$i,1);
if(isset($hash[$char])){
$hash[$char]--;
if($hash[$char] == 0) unset($hash[$char]);
}else{
return $char;
}
}
return key(current($hash));
}
}
【解析】
用一个hash表先将字符串S的字符存入hash中,并计数。然后将字符串T中的字符去hash表中查找,如果不在hash表中,说明就是添加的字符串,即直接找到结果。如果有多个重复的,则遍历一遍hash表之后,剩下的字符即是添加的字符。