寒假刷題17:1296E1 - String Coloring (easy version)

題目鏈接:
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;
}
發佈了56 篇原創文章 · 獲贊 22 · 訪問量 6304
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章