【发布时间】:2015-07-25 05:24:31
【问题描述】:
我正在尝试制作一个程序来尝试字符串中的每个排列以检查它是否可以创建回文字符串。如果不是,它会删除一个字符并再次尝试,依此类推,直到找到解决方案。我不明白为什么它会给我一个分段错误。这是我的代码:
bool IsPalindrome(string s){
string t;
int x=s.size()-1;
for(int i=x;i>=0;i--)
t+=s[i];
if(s==t)
return true;
else
return false;
}
void generate_permutation(string s,int i){
sort(s.begin(),s.end());
do{
if(IsPalindrome(s)){
if(i%2==0){
cout<<"First"<<endl;
exit(0);
}
else{
cout<<"Second"<<endl;
exit(0);
}
}
}while(next_permutation(s.begin(),s.end())) ;
}
int main(){
string s;
cin>>s;
int i=0;
while(s.size()>=1){
generate_permutation(s,i);
s.erase(s.begin()+i);
i++;
}
}
【问题讨论】:
-
你的问题是什么
-
你不需要尝试所有的排列;只需确保您对每个唯一字符都有一个偶数计数(以及可选的一个具有奇数计数的唯一字符)。
-
if (foo) return true; else return false;是多余的,在布尔上下文中等同于return foo;。
标签: c++ permutation