将我自己称为菜鸟,会使菜鸟看起来很糟糕...让我们先看一下代码...
bool isPalindrome(String s){
for(int i = 0; i < s.length/2;i++){
if(s[i] != s[(s.length-1) -i])
return false;
}
return true;
}
main() {
print(isPalindrome("anna"));
print(isPalindrome("cat"));
}
...结果为真-假
我在Dart的“初学者”示例列表中碰到了什么,即使我将s.length
中的字母数更改为"cat"
,它也是“假”,因此它不计算字母数但是"cats"
为“真”。有人可以请您深入解释该代码的功能。
您的误解不在代码中,而是在“回文”中。回文是一个单词,其拼写相同且前后颠倒。例如,如果您使用单词“ racecar”并颠倒字母的顺序,则结果将是“ racecar”,即完全相同的单词。
代码对“ anna”返回true,因为这仍然是正确的-向后“ anna”又是“ anna”。它为“猫”返回false,因为向后拼写为“ tac”,这是一个完全不同的词,因此表明“猫”不是回文。 (同样,向后“ caac”是“ caac”,因此是回文,而向后“ cats”是“ stac”,因此不是回文。)
代码的工作方式是将单词中的每个字母与镜像位置的字母进行比较。例如,第一个字母的镜像位置是最后一个字母,第二个字母是倒数第二个字母,依此类推。如果字母相同,则循环继续。如果到达末尾并且所比较的每个字母都相同,那么该单词前后的拼写相同,这意味着它是回文。
"caac"
但是,如果到达一个字母和相反位置的字母不相同的点,则意味着该单词向后的拼写与向前的拼写不会相同,这意味着它不是回文。 >
V racecar ==Same letter, continuing== ^ V racecar ==Same letter, continuing== ^ V racecar ==Same letter, continuing== ^ V racecar ==Same letter, continuing== ^ ==The end has been reached, the word is a palindrome, return true==
(在循环中仅上升到
V abcaa ==Same letter, continuing== ^ V abcaa ==Different letter, the word is not a palindrome, return false== ^
的原因是,一旦支票通过中途标记,它将开始比较已经比较过的字母。即在“ abcde”中,将“ b”与“ d”进行比较是与将“ d”与“ b”进行比较相同,因此循环会中途切出,以避免不必要的比较。)