UVa1584 Circular Sequence【字串處理 基礎】
阿新 • • 發佈:2018-12-21
問題描述
長度為n的環狀串有n種表示法,分別為從某 個位置開始順時針得到。例如,圖3-4的環狀串 有10種表示:
CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。在這些表示法中,字典序最小的稱 為"最小表示"。
輸入一個長度為n(n≤100)的環狀DNA串(只包含A、C、G、T這4種字元)的一種表示法,你的任務是輸出該環狀串的最小表示。例如,CTCC的最小表示是 CCCT,CGAGTCAGCT的最小表示為AGCTCGAGTC。
樣例輸入
2
CGAGTCAGCT
CTCC
樣例輸出
AGCTCGAGTC
CCCT
解題思路:使用C++的string類可以方便解決問題。找到最小的字母,然後擷取字串
AC的C++程式:
#include<iostream> #include<algorithm> #include<string> using namespace std; int main() { int t; string s,ans; scanf("%d",&t); while(t--){ cin>>s; ans=s; int len=s.length(); s+=s; char c=s[0]; for(int i=1;i<len;i++) if(c>s[i]) c=s[i]; for(int i=0;i<len;i++) if(s[i]==c){ string temp=s.substr(i,len); if(temp<ans) ans=temp; } cout<<ans<<endl; } return 0; }