某银行后台程序员Sroan编写了一个函数代码,函数主要为了实现比较两个字符串是否相同。
具体代码如下:
function isEqual($str1, $str2) {
if(strlen($str1) !== strlen($str2)) {
return false;
}
$result = 0;
for($i = 0; $i < strlen($str1); $i++) {
$result |= ord($str1[$i]) ^ ord($str2[$i]);
}
return $result == 0;
}
在上面的代码中,首先检查两个字符串的长度是否相同。如果它们的长度不同,则直接返回false。
如果两个字符串的长度相同,则遍历字符串,并使用异或运算符比较每个字符。最后,将比较结果与0进行比较,如果它们相等,则表示两个字符串相等,返回true,否则返回false。
Sroan的领导看了代码后,觉得这段代码效率低下,可以更好提高效率,于是额外添加了一行。具体如下:
function isEqual($str1, $str2) {
if(strlen($str1) !== strlen($str2)) {
return false;
}
$result = 0;
for($i = 0; $i < strlen($str1); $i++) {
$result |= ord($str1[$i]) ^ ord($str2[$i]);
if(result!=0) return false;
}
return $result == 0;
}
增加的这一行的代码作用是:两个字符串在中间某个位置不同,比较过程将会在这个位置停止,并返回不相等的结果。
问:从实际应用角度来看,以上两个函数,哪个更好?