递归写法
思路:写一个函数可以判断两个字符串是否相同,然后在函数中递归判断首和尾是否相同,如有字符串abccba,先判断位置l = 0和位置r = 5,然后在函数内将,l+1,r-1仍进去继续递归判断,一旦不相同,则判断不是回文串,如果l>=r的话就证明前面的也没问题,然后也判断完了,返回true;
代码:
string s;
bool isHuiWenChuan(int l, int r){
if( l >= r) return true;
if(s[l] != s[r]) return false;
return isHuiWenChuan(l+1,r-1);
}
int main(){
getline(cin,s);
if(isHuiWenChuan(0,s.size()-1)) cout << "这是回文串"<<endl;
else cout << "这不是回文串" <<endl;
return 0;
}
输入样例
112211
输出样例
这是回文串
非递归写法
思路:将这个字符串遍历扔进栈中,然后再从栈中逐一取出一一对比,即利用栈的反转特性从而来比较字符串的头和尾。
代码:
string str;
bool isHuiWenChuan_Stack(){
stack<char> s;
for(auto c : str)
s.push(c);
for(auto c: str){
if(c != s.top()) return false;
s.pop();
}
return true;
}
int main(){
stack<char> s;
getline(cin,str);
if(isHuiWenChuan_Stack()) cout << "yes" <<endl;
else cout << "No" <<endl;
return 0;
}