CF1466C Canine poetry

题目描述

After his wife's tragic death, Eurydice, Orpheus descended to the realm of death to see her. Reaching its gates was uneasy, but passing through them proved to be even more challenging. Mostly because of Cerberus, the three-headed hound of Hades.

Orpheus, a famous poet, and musician plans to calm Cerberus with his poetry and safely walk past him. He created a very peculiar poem for Cerberus. It consists only of lowercase English letters.

We call a poem's substring a palindrome if and only if it reads the same backwards and forwards. A string aa is a substring of a string bb if aa can be obtained from bb by deleting several (possibly zero or all) characters from the beginning and several (possibly zero or all) characters from the end.

Unfortunately, Cerberus dislikes palindromes of length greater than 11 . For example in the poem abaa the hound of Hades wouldn't like substrings aba and aa.

Orpheus can only calm Cerberus if the hound likes his poetry. That's why he wants to change his poem so that it does not contain any palindrome substrings of length greater than 11 .

Orpheus can modify the poem by replacing a letter at any position with any lowercase English letter. He can use this operation arbitrarily many times (possibly zero). Since there can be many palindromes in his poem, he may have to make some corrections. But how many, exactly? Given the poem, determine the minimal number of letters that have to be changed so that the poem does not contain any palindromes of length greater than 11 .

输入格式

The first line of the input contains a single integer tt ( 1 \leq t \leq 10^51≤t≤105 ) denoting the number of test cases, then tt test cases follow.

The first and only line of each test case contains a non-empty string of lowercase English letters, Orpheus' poem.

The sum of the length of Orpheus' poems in all test cases will not exceed 10^5105 .

输出格式

You should output tt lines, ii -th line should contain a single integer, answer to the ii -th test case.

题意翻译

该题有 t 组数据。

每组数据给出一个由小写字母组成的字符串 s。

每次可以将串 s 中任意一个位置的字符修改为另一个小写字母。

问最少要修改多少次,才可以使得串 ss 中不存在长度大于 1 的回文子串。

 t ≤ 10^5,∑∣s∣≤10^5。

翻译提供:HoshizoraZ

输入输出样例

输入 #1复制

7
babba
abaac
codeforces
zeroorez
abcdcba
bbbbbbb
a

输出 #1复制

1
1
0
1
1
4
0

说明/提示

In the first test case, we can replace the third character with c and obtain a palindrome-less poem bacba.

In the second test case, we can replace the third character with d and obtain a palindrome-less poem abdac.

In the third test case, the initial poem already doesn't contain any palindromes, so Orpheus doesn't need to change anything there.

思路:

使s中不存在长度大于1的回文串,任意长度回文串都包含3个字符或2个字符的回文串,此题中只需寻找3个字符或2个字符的回文串即可

代码

#include <stdio.h>
#include <iostream>
using namespace std;
int main() {
	int t;
	cin>>t;
	while (t--) {
		string s;
		cin>>s;
		int ans=0;
		int h[100005]={0};	//标记该字符有无被修改 
		for (int i=0;i<s.length()-1;i++) {
			if (s[i]==s[i+1]&&h[i]==0) {
				ans++;
				h[i+1]=1;	//标记修改过,避免重复 
			}
			if (s[i]==s[i+2]&&h[i]==0) {
				ans++;
				h[i+2]=1;
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值