当前位置:   article > 正文

美团23年春招技术笔试_* 输入一串数字字符串,将其修改为不含连续相同数字的字符串,输出最小修改次数 * >

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

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

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

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

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

  1. //编程语言:c 语言
  2. #include<stdio.h>
  3. #include<string.h>
  4. int main()
  5. {
  6. char s[100];
  7. int len ,i;
  8. int num = 1,a = 0;
  9. gets(s);
  10. len = strlen(s);
  11. for(i = 1;i < len;i ++)
  12. {
  13. if(s[i-1] == s[i])
  14. {
  15. num += 1;
  16. //printf("num/2:%d\n",num/2);
  17. }
  18. else
  19. {
  20. a += num/2;
  21. //printf("a:%d\n",a);
  22. num = 1;
  23. }
  24. }
  25. a += num/2;
  26. printf("%d\n",a);
  27. return 0;
  28. }

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

  1. //编程语言:c 语言
  2. #include<stdio.h>
  3. #include<string.h>
  4. int main()
  5. {
  6. char s[100];
  7. int len ,i;
  8. int num = 0;
  9. gets(s);
  10. len = strlen(s);
  11. for(i = 1;i < len;i++)
  12. {
  13. if(s[i-1] == s[i])
  14. {
  15. num += 1;
  16. i = (s[i+1] == s[i]) ? i + 1:i;
  17. //printf("num/2:%d\n",num/2);
  18. }
  19. }
  20. printf("%d\n",num);
  21. return 0;
  22. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/802323
推荐阅读
相关标签
  

闽ICP备14008679号