Openjudge NOI題庫1.7程式設計基礎之字串 34:迴文子串
阿新 • • 發佈:2019-01-30
總時間限制: 1000ms 記憶體限制: 65536kB
- 描述
-
給定一個字串,輸出所有長度至少為2的迴文子串。
迴文子串即從左往右輸出和從右往左輸出結果是一樣的字串,比如:abba,cccdeedccc都是迴文字串。
- 輸入
- 一個字串,由字母或數字組成。長度500以內。
- 輸出
- 輸出所有的迴文子串,每個子串一行。
子串長度小的優先輸出,若長度相等,則出現位置靠左的優先輸出。 - 樣例輸入
-
123321125775165561
- 樣例輸出
-
33 11 77 55 2332 2112 5775 6556 123321 165561
-
思路:從第一個字元開始比較,先從兩個開始,比如12321 先看12 23 32 21 沒有就找123 232 321 然後 1232 2321 我用k控制我找的字元數,i控制字串的迴圈,然後寫一個函式判斷是否為迴文數,以上分析可知,當跨過k個字元時,i只需比較到len-k。程式碼如下
-
#include<iostream> #include<cstdlib> #include<algorithm> #include<iomanip> #include<string.h> #include<cstdio> using namespace std; string str; int len; int check(int x,int y)//檢查從x到y是不是迴文字串 { int s=x,t=y; while(s<=t) { if(str[s]!=str[t])return 0;//如果不相等直接返回 s++,t--;//繼續比較 } for(int i=x;i<=y;i++)//輸出這幾個字元 cout<<str[i]; cout<<"\n"; return 0; } int main() { getline(cin,str);//接收字串 len =str.size(); for(int k=1;k<len;k++)//控制比較的字元數目,從兩個開始比較 for(int i=0;i<=len-k;i++)//從第一個字元開始 跨過k個字元數 check(i,i+k); }