指定两个字符串,通过程序的判断两个字符串是否互为变型词。
$str = 'abcd';
$compare_str = 'cdab';
compare_func($str,$compare_str); //此时返回true
//或
$str = '123a';
$str = '123';
compare_func($str,$compare_str); //此时返回false
解题思路:
- 如果两个字串是互为变型词,那么字串长度是一致的。
- 遍历第一个字串的每个字符获取其Ascii做下标,统计出现次数,存入Ascii数组。再遍历第二个字串中每个字符的Ascii做下标,直接从Ascii数组中减去出现次数即可。
function compare_func($str,$compare_str)
{
$strl = strlen($str);
$compare_strl = strlen($compare_str);
// 若两个字串的长度等于零或不一致返回false
if ($strl + $compare_strl === 0 || $strl !== $compare_strl)
return false;
// 存储出现过的字符
$ascii = [];
for ($i = 0;$i < $strl;$i++) {
// 以每个字符的Ascii码作为下标
$ascii[ord($str[$i])] ++;
}
for ($i = 0;$i < $strl;$i++) {
// 这里如果已经等于零了,再自减必然为负数,那么直接返回false
if ( $ascii[ord($compare_str[$i])] -- == 0 ){
return false;
}
}
return true;
}