Dart“ For循环”“ If Else”“ Boolean return”

问题描述 投票:1回答:1

将我自己称为菜鸟,会使菜鸟看起来很糟糕...让我们先看一下代码...

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"为“真”。有人可以请您深入解释该代码的功能。

dart palindrome
1个回答
0
投票

您的误解不在代码中,而是在“回文”中。回文是一个单词,其拼写相同且前后颠倒。例如,如果您使用单词“ 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”进行比较相同,因此循环会中途切出,以避免不必要的比较。)

© www.soinside.com 2019 - 2024. All rights reserved.