题目背景
honoka 有一个只有两个键的键盘。
题目描述
一天,她打出了一个只有这两个字符的字符串。当这个字符串里含有 VK
这个字符串的时候,honoka 就特别喜欢这个字符串。所以,她想改变至多一个字符(或者不做任何改变)来最大化这个字符串内 VK
出现的次数。给出原来的字符串,请计算她最多能使这个字符串内出现多少次 VK
(只有当 V
和 K
正好相邻时,我们认为出现了 VK
。)
输入格式
第一行给出一个数字 n n n,代表字符串的长度。
第二行给出一个字符串 s s s。
输出格式
第一行输出一个整数代表所求答案。
1.题目分析
输入一段指定长度的字符串,计算出现VK的次数,可以修改一次,是VK的数量最大化。
值得一提的是,需要先把字符串中的VK去除,再遍历,找到VV或者KK,计数一次,跳出循环即可。
去除的目的是为了,寻找KK和VV时,不影响结果的判断。
2.题目思路
输入一段字符串,判断相邻两个字符是否为VK,如果是,将这两个元素置为零,计数器加一。
第二轮循环,判断剩余元素中是否出现KK和VV,出现说明可以修改一次,得到VK,让计数器加一后跳出循环。
值得一提的是,要杜绝数组索引越界的情况。
3.代码演示
#include <stdio.h>int main() {int n;scanf("%d", &n);char str[n];scanf("%s", str);int cnt = 0;for (int i = 0; i < n; ++i) {//统计VK的数量//防止索引越界if (i + 1 < n) {if (str[i] == 'V' && str[i + 1] == 'K') {cnt++;//把VK消除str[i] = 0;str[i + 1] = 0;}}}for (int i = 0; i < n; ++i) {//修改vv kk的情况//防止索引越界if (i + 1 < n) {//修改 vv 和 kk的情况if (str[i] == 'V' && str[i + 1] == 'V') {cnt++;break;} else if (str[i] == 'K' && str[i + 1] == 'K') {cnt++;break;}}}printf("%d", cnt);return 0;
}