最小字典序: 题目描述: 给定长度为N的字符串为S,要构造一个长度为N的字符串T。起初,T 是一个空串,随后反复进行下列任意操作。 ①:从S的头部删除一个字符串,加到T的尾部, ②:从S的尾部删除一个字符,加到T的尾部 思路解析:将字符串S和反转后的字符串S‘逐一进行字符的比较,若前者第一个小于后者第一个,则将S的首字符放入T中,若S的首字符大于S’的首字符,则将S‘的首字符放入到T中,若两者相等,则都可以;
代码: //求字典序最小的字符串 #include<bits/stdc++.h> using namespace std; int N; string S; void solve() { bool isleft=false; int left=0,right=N-1; while(left<=right) { isleft=false; for(int i=0;i+left<right;i++) { if(S[i+left]<S[right-i]) { isleft=true; break; } else if(S[i+left]>S[right-i]){ isleft=false; break; } } if(isleft) cout<<S[left++]; else cout<<S[right–]; } } int main() { printf(“请输入N的值:”); cin>>N; printf(“请输入字符串:”); cin>>S; solve(); return 0; }
