C++ 求给定字符串的回文分区的算法

C++ 求给定字符串的回文分区的算法,c++,string,algorithm,recursion,backtracking,C++,String,Algorithm,Recursion,Backtracking,我在查找给定字符串的所有可能的回文分区时遇到了SIGSEGV错误 I/O:-aba O/p:-(aba)、(a)(b)(a) 该算法应该在它看到回文序列的每个地方给出一个分区 我试图生成从长度0到n-1的所有可能的子序列,如果生成的子序列有效,那么我继续处理剩余的字符串 这是我试过的代码 ` bool isPalindrome(字符串str) { int start=0; int end=str.length()-1; 而(startYourisAlindrome函数将零字符串判断为回文,因此s

我在查找给定字符串的所有可能的回文分区时遇到了SIGSEGV错误

I/O:-aba

O/p:-(aba)、(a)(b)(a)

该算法应该在它看到回文序列的每个地方给出一个分区

我试图生成从长度0到n-1的所有可能的子序列,如果生成的子序列有效,那么我继续处理剩余的字符串

这是我试过的代码

`

bool isPalindrome(字符串str)
{
int start=0;
int end=str.length()-1;

而(startYour
isAlindrome
函数将零字符串判断为回文,因此
solution
函数中的第一次迭代将每次调用
solution
,并导致无限递归。您应该重新考虑算法。
bool isPalindrome(string str)
{
int start = 0;
int end = str.length()-1;

while(start<end)
{
    if(str[start]!=str[end])
        return false;
    
    start++;
    end--;
}
return true;
}
void solution(string str , string result)
{
if(str.length()==0)
{
    cout<<result<<endl;
    return;
}
for(int i = 0 ; i<str.length(); i++)
{
    string prefix = str.substr(0,i);
    string rest = str.substr(i , str.length()-i);
    
     if(isPalindrome(prefix))
     {
         // cout<<prefix<<" "<<rest<<endl;
         // cout<<"yes";
      solution(rest , result + "(" + prefix + ")");
     }
  }

   }
  int main()
  {
    string s; cin>>s;
    solution(s , "");
    return 0;
   }`