题意:
给定两个字符串 s
和 t
,它们只包含小写字母。
字符串 t
由字符串 s
随机重排,然后在随机位置添加一个字母。
请找出在 t
中被添加的字母。
示例 1:
输入:s = “abcd”, t = “abcde”
输出:“e”
解释:‘e’ 是那个被添加的字母。
示例 2:
输入:s = “”, t = “y”
输出:“y”
提示:
0 <= s.length <= 1000
t.length == s.length + 1
s
和t
只包含小写字母
题目来源: https://leetcode.cn/problems/find-the-difference/description/
解题方法:
方法一:统计各个字符出现的次数,次数不一样的则为插入的字符(PHP内置函数)
function findTheDifference($s, $t) {// 转换成数组$s_arr = str_split($s);$t_arr = str_split($t);// 统计各个字符出现的次数$s_value_arr = array_count_values($s_arr);$t_value_arr = array_count_values($t_arr);// 次数不同的则为添加的字母$sss = array_diff_assoc($t_value_arr, $s_value_arr);return key($sss);
}
方法二:hash表辅助,原理同方法一是一样的
// hash表
function findTheDifference($s, $t) {$s_length = strlen($s);$hash = [];for ($i = 0; $i < $s_length; $i++){$char = $s[$i];if(!isset($char)){$hash[$char] = 1;}else{$hash[$char]++;}}for($i = 0; $i < $s_length + 1; $i++){$char = $t[$i];if(!isset($hash[$char])){return $char;}else{$hash[$char]--;if($hash[$char] == 0){unset($hash[$char]);}}}return key(crrent($hash));
}
方法三:ASCII计算(两个字符串ASCII总数的差值,再转换为对应的字符即可)
// ASCII计算(两个字符串ASCII总数的差值,再转换为对应的字符即可)
// 借助辅助函数 ord() — 转换字符串第一个字节为 0-255 之间的值 / chr() - 从数字生成单字节字符串
function findTheDifference($s, $t) {$sum = 0;for($i = 0; $i < strlen($t); $i++){$sum += ord($t[$i]);}for($i = 0; $i < strlen($s); $i++){$sum -= ord($s[$i]);}return chr($sum);
}
方法四:异或运算
// 异或解法()相同为0,不同为1
function findTheDifference($s, $t) {$ans = substr($t, -1, 1);$sLen = strlen($s);for($i = 0; $i < $sLen; $i++){$ans ^= substr($s, $i, 1) ^ substr($t, $i, 1);}return $ans;
}
参考:
作者:Zou Zhipeng
链接:https://leetcode.cn/problems/find-the-difference/solutions/525911/php-san-chong-jie-fa-ha-xi-biao-ascii-ji-c0il/
来源:力扣(LeetCode)