题目背景
honoka 有一个只有两个键的键盘。
题目描述
一天,她打出了一个只有这两个字符的字符串。当这个字符串里含有 VK 这个字符串的时候,honoka 就特别喜欢这个字符串。所以,她想改变至多一个字符(或者不做任何改变)来最大化这个字符串内 VK 出现的次数。给出原来的字符串,请计算她最多能使这个字符串内出现多少次 VK(只有当 V 和 K 正好相邻时,我们认为出现了 VK。)
输入格式
第一行给出一个数字 nn,代表字符串的长度。
第二行给出一个字符串 ss。
输出格式
第一行输出一个整数代表所求答案。
输入输出样例
输入
2
VK
输出
1
分析:当l=2时,只有VV和KK能被替换,增加VK字符串的数量,而当l>2时,如果采用分类讨论,枚举每一种情况(如VVK不能替换,VVV能够替换),则代码过于复杂,可读性不强,且易于出错,因此采取另一种方法;先过一遍字符串,将VK字符替换成AB之后,再过一遍字符串,扫到VV或KK时结束,sum++,这样就排除了原字符串中VK的干扰,同时代码简单思路清晰,可读性强。
源码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int l,i,sum=0;
string s;
cin >> l >> s;
for(i=0;i<l-1;i++)
{
if(s[i]=='V'&&s[i+1]=='K')
{s[i]='A';s[i+1]='B';sum++;}
}
for(i=0;i<l-1;i++)
{
if(s[i]==s[i+1])
{sum++;break;}
}
cout << sum << endl;
}