B - Vicious Keyboard

本文介绍了一种算法问题,目标是通过更改一个字符来最大化字符串中特定子串VK的出现次数。文章给出了一个示例代码,该代码通过遍历字符串并尝试替换每个字符来计算可能的最大VK配对数量。

B - Vicious Keyboard 

Tonio has a keyboard with only two letters, "V" and "K".

One day, he has typed out a string s with only these two letters. He really likes it when the string "VK" appears, so he wishes to change at most one letter in the string (or do no changes) to maximize the number of occurrences of that string. Compute the maximum number of times "VK" can appear as a substring (i. e. a letter "K" right after a letter "V") in the resulting string.

Input

The first line will contain a string s consisting only of uppercase English letters "V" and "K" with length not less than 1 and not greater than 100.

Output

Output a single integer, the maximum number of times "VK" can appear as a substring of the given string after changing at most one character.

Example

Input
VK
Output
1
Input
VV
Output
1
Input
V
Output
0
Input
VKKKKKKKKKVVVVVVVVVK
Output
3
Input
KVKV
Output
1
题意:输入一个字符串,输出其中有多少对VK,可以任意更改其中的一个字符串使VK对的数量最多。
题解:暴力先不更改计算有多少对VK,然后没次更改一个字符串计算一次,取最大值。
代码
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdlib>
using namespace std;
int main()
{
    char str[105],s;
    int ans[210],i,j,len;
    while(cin>>str){
           memset(ans,0,sizeof(ans));
        len=strlen(str);
        for(i=0;i<len;i++)
            if(str[i]=='V'&&str[i+1]=='K'&&(i+1)<len)
            ans[0]++;
        for(j=1;j<=len;j++)//依次把字符串换成K计算,每次换完后要换回去。
        {
            s=str[j-1];
            str[j-1]='K';
                for(i=0;i<len;i++)
            if(str[i]=='V'&&str[i+1]=='K'&&(i+1)<len)
            ans[j]++;
            str[j-1]=s;
        }
        for(j=len+1;j<=2*len;j++)//依次把字符串换成V计算
        {
            s=str[j-1-len];
            str[j-1-len]='V';
            for(i=0;i<len;i++)
            if(str[i]=='V'&&str[i+1]=='K'&&(i+1)<len)
            ans[j]++;
            str[j-1-len]=s;
        }
        ans[0]=*max_element(ans,ans+2*len+1);
        cout<<ans[0]<<endl;
    }
}

 


转载于:https://www.cnblogs.com/GXXX/p/6813591.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值