程序查找给定字符串中回文子串的数量

Program to find the number of substrings that are palindromes in a given string

这是我的代码,但是函数 countPalindromes 由于某种原因总是 returns 0。我无法理解为什么

bool isPalindrome(string s) {
    int x=0;
    int r= s.length() -1;
    while(r>1){
        if(s[x++]!=s[r--])
        {
            cout<<"Not Palindrome";
        }
        else
        {
            return true;
        }
    }
}

int countPalindromes(string s) {
    int n= s.length();
    int counter=0;
    for(int i = 0; i<n ;  i++)
    {
        for(int j=1; j< n -i ; j++)
        {
            if(isPalindrome(s.substr(i,j)=true))
            {
             counter+=1;
            }

        }

    }
    return counter;
}


int main() {
    cout<<countPalindromes("ABA");
    return 0;
}

countPalindromes()isPalindrome() 函数都有很多错误。

  1. 首先在 isPalindrome() 函数中,检查直到 r>1。您必须检查整个字符串。为此,条件将是 r>=0。只要有字符匹配,你就是 returning true。在确定位置 S[i] 的任何字符不等于 S[n-i-1](其中 n 是字符串的长度)后,您可以 return 为真。
  2. 其次是 countPalindromes() 函数,您在比较子字符串时传递了错误的参数。

看看你修改后的代码就明白了。

bool isPalindrome(string s) {
    int x=0;
    int r= s.length() -1;
    while(r>=0){
        if(s[x++]!=s[r--])
        {
            //cout<<"Not Palindrome"<<endl;
            return false;
        }
    }
    return true;
}

int countPalindromes(string s) {
    int n= s.length();
    int counter=0;
    for(int i = 0; i<n ;  i++)
    {
        for(int j=1; j<= n -i ; j++)
        {
            if(isPalindrome(s.substr(i,j))==true)
            {
             counter+=1;
            }

        }

    }
    return counter;
}


int main() {
    cout<<countPalindromes("ABA");
    return 0;
}