題目鏈接:
1296E1 - String Coloring (easy version)
題目解析:
這道題實際上是把一個字符串分爲兩個不遞減的子串。
可以用DP,但還有一種貪心的方法:從左到右遍歷原字符串,並新建兩個字符串s1,s2,如果當前字符大於等於s1的末尾,則把它加入到s1中;如果大於等於s2末尾,則加入到s2中;其餘情況則爲“NO”
AC代碼:
#include <bits/stdc++.h>
using namespace std;
int n;
string s,res;
int main()
{
cin >> n >> s;
char lst0 = 'a', lst1 = 'a';
for (int i=0; i < n; i++)
{
if (s[i] >= lst0)
{
res += '0';
lst0 = s[i];
}
else if (s[i] >= lst1)
{
res += '1';
lst1 = s[i];
}
else
{
cout << "NO" << endl;
return 0;
}
}
cout << "YES" << endl << res << endl;
return 0;
}