我最近了解了迭代器,并尝试将其应用于编码挑战(https://www.codewars.com/kata/54bb6f887e5a80180900046b/)。
int palindromeDetected(std::string::const_iterator iter, std::string s){
int range = 1;
//check if outer characters match, with increasing range
for(; *(iter-range) == *(iter+range+1) && iter-range != s.begin()-1 && iter+range+2 != s.end(); range++);
return range*2;
}
int longest_palindrome(const std::string &s)
{
unsigned maxLength = 0;
if (!s.empty()) maxLength++;
for(auto iter = s.begin(); iter != s.end(); iter++){
if(*iter == *(iter+1)){ //if curr char matches next char check for palindrome
unsigned tmp = palindromeDetected(iter, s);
if(tmp > maxLength) maxLength = tmp;
}
}
return maxLength;
}
我试图在palindromeDetected for循环中跟踪迭代器,看来它们不知道在哪里停止。
例如,对于“ aaaa”,它将检测到第二个字母上的最大回文,跳入palindromeDetected函数并检测外部的'a'字符,将范围增加到2。这是正确的,但并不止于此。除了返回2 * 2之外,它还会检测显示为空白的相似字符。
怎么了?