[分治] 迴文字符串

迴文字符串就是從前向後看從後向前看都是一樣的字符串。

思路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;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章