题意:
已知一段长度为N的字符串,让你构造一个字典序最小的字符串.构造的规则如下:如果原始字符串的头部 < 原始字符串的尾部,则从原始字符串的头部删除该字符添加到新的字符串的一个字符;如果头部 > 尾部则删除尾部的字符添加到新字符串中.
题解:
反复比较开头与结尾的字符,如果两个字符相同则比较下一位
贪心算法
#include <iostream>
#include <string>
using namespace std;
int n;
char s[2010];
void solve()
{
int start = 0, end = n - 1,count = 0;
while(start <= end)
{
bool flag = false;
for(int i = 0; i <= end - start; i++)
{
if(s[start+i] < s[end-i])
{
flag = true;
count++;
break;
}
else if(s[start+i] > s[end-i])
{
flag = false;
count++;
break;
}
}
if(flag) cout<<s[start++];
else cout<<s[end--];
if(count % 80 == 0)
cout<<endl;
}
cout<<endl;
}
int main(void)
{
cin>>n;
for(int i = 0; i < n; i++)
cin>>s[i];
solve();
return 0;
}