查找给定字符串中回文子串的数量的程序
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;
【讨论】:
非常感谢,我现在明白了以上是关于查找给定字符串中回文子串的数量的程序的主要内容,如果未能解决你的问题,请参考以下文章