69,368
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string.h>
int main()
{
int N = 0, M = 0;
char buf[1024] = { 0 };
int len;
int maxHP = 0;
int start = 0, end;
int DN = 0, AN = 0;
int tmp;
scanf("%d", &N);
scanf("%d", &M);
if (N < M)
{
printf("Input error.\n");
return 0;
}
scanf("%s", buf);
len = strlen(buf);
if (len != N)
{
printf("Input error.\n");
return 0;
}
tmp = 0;
while (tmp < len)
{
if (buf[tmp] != 'D' && buf[tmp] != 'A')
{
printf("Input error.\n");
return 0;
}
++tmp;
}
while (start < len)
{
end = start;
DN = 0, AN = 0;
for (; end < len; ++end)
{
if (buf[end] == 'D')
++DN; // 统计D个数
else
++AN; // 统计A个数
if ((DN > AN ? AN : DN) == M) // 如果连续串中D和A个数最小等于M,那么立即停止
break;
}
if (DN < AN) // 反转D->A的情况
{
tmp = 'A';
}
else if (DN > AN) // 反转A->D的情况
{
tmp = 'D';
}
else // DN == AN,随便反转的情况
{
tmp = 0;
}
// 统计更后续的字符是否符合情况
while (++end < len)
{
if (tmp == 0 || tmp == buf[end])
{
tmp = buf[end];
}
else
{
break;
}
}
if (end - start > maxHP) // 此串更长,更新最大HP值
{
maxHP = end - start;
}
// 如果end已经能查找到最后,终止轮询。(继续轮询无意义,因为查找的值将不可能大于maxHP)
if (end >= len)
{
break;
}
++start;
}
printf("%d\n", maxHP);
return 0;
}