Best cow line
题目大意:给一个长度为n的字符串s,通过选取s的第一个元素或者最后一个元素加入到空串T的尾部(进行操作后s应该删除第一个或者最后一个元素),求T字典序最小的排序方法
思路:先比较首元素和尾元素,字典序小的就加入到T中,若是相等,那么left加1,right减1,知道不相等的时候
#include <iostream> #include <vector> #include <cstdio> using namespace std; int main() { int n; char a[2005]; vector<char> b; cin>>n; getchar(); for(int i=0;i<n;i++) { cin>>a[i]; getchar(); } int left=0,right=n-1; while(left<=right)//当left==right时说明字符串s只剩一个元素了 { int flag=-1;//当left=right时,不能通过for循环来该改变left right的值,通过该变量来使right值减小 for(int i=0;i+left!=right-i;i++) { if(a[left+i]<a[right-i]) { b.push_back(a[left++]); flag=1; break; } else if(a[left+i]>a[right-i]) { b.push_back(a[right--]); flag=1; break; } } if(flag!=1)b.push_back(a[right--]);; } int ans=0; for(int i=0;i<b.size();i++) { cout<<b[i]; ans++; if(ans%80==0)cout<<endl; } cout<<endl; }