[Offer收割]编程练习赛79——字母去重

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hh66__66hh/article/details/83188093

[Offer收割]编程练习赛79——字母去重

题目

时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
给定一个字符串S,每次操作你可以将其中任意一个字符修改成其他任意字符。

请你计算最少需要多少次操作,才能使得S中不存在两个相邻的相同字符。

输入
只包含小写字母的字符串S。

1 ≤ |S| ≤ 100000

输出
一个整数代表答案

样例输入

aab

样例输出

1

思路

这道题是一道水题。思路是从字符串的第二个字符开始,看s[i]是否与s[i-1]相等,如果相等,就看s[i-1]的值是否进行了修改,如果s[i-1]进行了修改,那么s[i]就不用再进行修改(因为s[i-1]可以修改为任意字符,因此无论如何都可以改成与其相邻的字符不同);如果s[i-1]没有进行修改,那么就要改s[i]。这里主要的技巧在于如何记录是否进行了修改。

代码

#include <iostream>
#include <stdio.h>
#include <string>
#include<string.h>
#include <vector>
#include <map>
#include <stack>
#include <algorithm>
#include <stack>
#include <queue>
using namespace std;



int main() {
    char s[100005];
    int i, j, k, ans, tip;
    while(~scanf("%s", &s)) {
        ans = 0;
        tip = 0;
        for(i=1; i<strlen(s); i++) {
            if(s[i] == s[i-1]) {
                if(tip == 0) {
                    tip++;
                    ans++;
                }
                else {
                    tip = 0;
                }
            }
            else {
                tip = 0;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/hh66__66hh/article/details/83188093