直接枚举得到连续相同的部分,观察发现修改长度为 x 的连续相同字符使其 不包含两个连续相同的字符只需要每隔一个修改一下,修改次数就是 x/2 向下取整,也就是 x>>1,枚举一下即可。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
int ans = 0, now = 0;
for(int i = 1 ; i <= s.size() ; i ++) {
now ++;
if(i == s.size() || s[i] != s[i-1]) {
ans += now >> 1;
now = 0;
}
}
cout << ans << endl;
}
let s = readline()
let ans = 0
let now = 0
for(let i = 1 ; i <= s.length ; i ++) {
now++
if(i == s.length || s.charAt(i) != s.charAt(i-1)) { //i == s.length是处理最后一段
ans += now >> 1
now = 0 //处理完每一段之后清空
}
}
console.log(ans)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
char[] chars = str.toCharArray();
int count = 0;
int ans = 0;
for (int i = 0; i < chars.length; i++) {
if (count == 0){
count++;
}else if (chars[i] == chars[i-1]){
count++;
}
if (count == 2){
ans++;
count = 0;
}
}
System.out.println(ans);
}
}
小美是一位爱好数学的程序员,最近他遇到了一道有趣的字符串处理问题。他手中有一个字符串,由一些数字字符组成,但是其中可能存在两个连续相同的字符,他想要将这个问题解决掉。
具体地,他可以将字符串中的任意一个字符修改为另一个数字字符,但是为了让修改次数尽可能少,他想知道最少需要进行多少次修改,才能让修改后的字符串不包含两个连续相同的字符。
例如,对于字符串 11222333 ,他可以进行 3 次修改将其变为 121212313 。
一行, 一个字符串 s ,保证 s 只包含数字字符。
1≤∣s∣≤100000
一行,一个整数,表示修改的最少次数。
输入
111222333
输出
3