AT5158 [AGC037A] Dividing a String 题解

description

  • 给定一个字符串 S S S,请你找出一个最大的 k k k,使得将这个字符串划分成 k k k 段后能够保证相邻的两段不相同。

  • 1 ≤ ∣ S ∣ ≤ 2 × 1 0 5 1\le |S| \le 2\times 10^5 1S2×105,且保证 S S S 串内均为小写字母。

  • translate by @ShineEternal。

solution

我们贪心的进行划分,每次遇到一个和上一次不一样的串就可以单独提取出来一次了。

code

#include
#include
#include
#include
using namespace std;
char s[200005];
int main()
{
	int cnt=0;
	scanf("%s",&s);
	int n=strlen(s);
	string a="",b="";
	for(int i=0;i<n;i++)
	{
		a+=s[i];
		if(a!=b)
		{
			b=a;
			cnt++;
			a="";
		}
	}
	printf("%d\n",cnt);
	return 0;
} 

你可能感兴趣的:(洛谷刷题,AT刷题题解)