迴文字符串就是從前向後看和從後向前看都是一樣的字符串。
思路1:遞歸解法把大問題一步一步分解爲小問題
問題f(“abccba”)= 第一個字符和最後一個字符相同 && f(“bccb”)
思路2:全部壓入棧。再依次彈出時和原字符串從頭到腳依次比較,如果任何位置的兩個比較的字符串都相同,那麼字符串就是迴文,否則就不是。
遞歸解法1
#include<iostream>
using namespace std;
bool ish(string s){
if(s.size()<=1) return true;
return s[0]==s[s.length()-1]&&ish(s.substr(1,s.size()-2));
}
int main() {
string s("abcddcba");
if(ish(s)) cout<<"yes";
else cout<<"no";
return 0;
}
遞歸解法2
#include<iostream>
#include<string>
using namespace std;
string s;
bool f(int L,int R){
if(L==R+1||L==R) return 1;
if(s[L]==s[R]) {
L++;R--;
f(L,R);
}else return 0;
}
int main() {
cin>>s;
f(0,s.size()-1)? cout<<"YES":cout<<"NO";
return 0;
}
#include<iostream>
#include<stack>
using namespace std;
int main() {
string s("abcba"); char c;
stack<char> V;
for(int i=0;i<s.size();i++){
V.push(s[i]);//全壓進去
}
for(int i=0;i<s.size();i++){
c=V.top();
V.pop();//一般需要判斷V.empty() 本例不用
if(s[i]!=c) {cout<<"no";return 0;}
}
cout<<"yes";
return 0;
}