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

Posted

技术标签:

【中文标题】查找给定字符串中回文子串的数量的程序【英文标题】:Program to find the number of substrings that are palindromes in a given string 【发布时间】:2019-09-15 15:35:11 【问题描述】:

这是我的代码,但函数 countPalindromes 出于某种原因总是返回 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;

【问题讨论】:

您需要学习如何使用调试器逐步执行代码,这将帮助您找到自己的错误。也就是说,作为这里的新用户,请使用tour 并阅读How to Ask。 这里有一堆错误。使用调试器单步执行逻辑并确保它在每个点上都按照您的意愿行事。 【参考方案1】:

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

    首先在 isPalindrome() 函数中,检查直到 r>1。您必须检查整个字符串。为此,条件将是 r>=0。只要有字符匹配,您就会返回 true。在确定位置 S[i] 的任何字符不等于 S[n-i-1](其中 n 是字符串的长度)后,您可以返回 true。 其次是 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;

【讨论】:

非常感谢,我现在明白了

以上是关于查找给定字符串中回文子串的数量的程序的主要内容,如果未能解决你的问题,请参考以下文章

Hihocoder #1602 : 本质不同的回文子串的数量 manacher + BKDRhash

返回最长回文子串的长度中心扩散法

最长回文子串的不同解法

最长回文子串自顶向下动态规划

Leetcode最长回文子串

#1589 : 回文子串的数量