飞镖“ For Loop”“ If Else”“ Boolean return”

时间:2019-11-18 18:25:19

标签: dart palindrome

给我自己一个菜鸟称呼它会使菜鸟看起来不好...让我们先看一下代码 ...

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"));
}

... 结果为真-假

即使我将s.length中的字母数更改为"cat",在“初学者” Dart示例列表中还是发现"cats"是“假”,所以它没有计算字母的数量,但是"caac"是“ true”。 有人可以详细说明该代码的作用吗。

1 个答案:

答案 0 :(得分:2)

您的误解不在代码中,而是在“回文”中。回文是一个单词,其拼写相同且前后颠倒。例如,如果您使用单词“ racecar”并颠倒字母顺序,则结果将是“ racecar”,即完全相同的单词。

代码对“ anna”返回true,因为这仍然是正确的-向后“ anna”又是“ anna”。它为“猫”返回false,因为向后拼写为“ tac”,这是一个完全不同的词,因此表明“猫”不是回文。 (同样,向后“ caac”是“ caac”,因此是回文,而向后“ cats”是“ stac”,因此不是回文。)

代码的工作方式是将单词中的每个字母与镜像位置的字母进行比较。例如,第一个字母的镜像位置是最后一个字母,第二个字母是倒数第二个字母,依此类推。如果字母相同,则循环继续。如果到达末尾且所比较的每个字母都相同,则该单词的前后拼写相同,这意味着它是回文。

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==
   ^

(在循环中仅上升到length/2的原因是,一旦支票通过中间标记,它将开始比较已经比较过的字母。即在“ abcde”中,将“ b”与“ d”与将“ d”与“ b”进行比较相同,因此循环会中途切出以避免不必要的比较。)