找不同


找不同

题目

1
2
3
4
5
6
7
8
9
10
11
12
给定两个字符串 s 和 t ,它们只包含小写字母
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母
请找出在 t 中被添加的字母

示例 1:
输入:s = "abcd", t = "abcde"
输出:"e"
解释:'e' 是那个被添加的字母。

示例 2:
输入:s = "", t = "y"
输出:"y"

解法1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
思路:
新增字符的ASCII码的值就是字符t的ASCII码之和 - 字符s的ASCII码之和

代码:
/**
* @param String $s
* @param String $t
*
* @return String
*/
function findTheDifference($s, $t)
{
$num = 0;
for ($i = 0; $i < strlen($s); $i++) {
// 求ASCII码之和
$num += ord($s[$i]);
}

$num2 = 0;
for ($i = 0; $i < strlen($t); $i++) {
$num2 += ord($t[$i]);
}

// 获取ASCII码并返回字符串
return chr($num2 - $num);
}

解法2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
思路:
使用count_chars获取字符串中字符对应的数量的数组,对比两个数组返回答案

代码:
/**
* @param String $s
* @param String $t
*
* @return String
*/
function findTheDifference($s, $t)
{
$sArr = count_chars($s); //返回ASCII码=>数量的数组
$tArr = count_chars($t);

// t比s多一个数,遍历t
foreach ($tArr as $k => $count) {
// 如果新增的字符不再s中
if (!isset($sArr[$k])) {
return chr($k); // 返回字符串
}

// 如果字符的数量不同
if ($sArr[$k] != $count) {
return chr($k);
}
}

return '';
}