美团23年春招技术笔试

题目一:输入一串数字字符串,将其修改为不含连续相同数字的字符串,输出最小修改次数

例:输入111222333,可修改为151252353,最少修改3次则输出3

例:输入11223344,可修改为15253545,最少修改4次则输出4

思路一:遍历字符串,记录每一个连续相同数字的子串长度,最小修改次数为每个子串长度除以2之和

//编程语言:c 语言

#include
#include

int main()
{
    char s[100];
    int len ,i;
    int num = 1,a = 0;
    gets(s);
    len = strlen(s);
    for(i = 1;i < len;i ++)
    {
        if(s[i-1] == s[i])
        {
            num += 1;
            //printf("num/2:%d\n",num/2);
        }
        else
        {
            a += num/2;
            //printf("a:%d\n",a);
            num = 1;
        }
        
    }
    a += num/2;
    printf("%d\n",a);
    return 0;
}

思路二:遍历字符串,每遇到两个连续相同字符则需修改一次,次数修改次数加一,且若下一个字符也与前两个相等,则字符串索引加一

//编程语言:c 语言

#include
#include

int main()
{
    char s[100];
    int len ,i;
    int num = 0;
    gets(s);
    len = strlen(s);
    for(i = 1;i < len;i++)
    {
        if(s[i-1] == s[i])
        {
            num += 1;
            i = (s[i+1] == s[i]) ? i + 1:i;
            //printf("num/2:%d\n",num/2);
        }
    }
    printf("%d\n",num);
    return 0;
}

你可能感兴趣的:(c语言,算法,面试)