字符串修改最少次数计算| 豆包MarsCode AI 刷题

82 阅读4分钟

做题笔记:字符串修改最少次数计算

问题描述

小C有一个由数字字符组成的字符串,她想对这个字符串进行修改,使修改后的字符串中没有连续相同的字符。她需要计算至少进行多少次修改,才能确保字符串中的每两个连续字符不同。


测试样例

样例1:

输入:s = "111222333"
输出:3

样例2:

输入:s = "11551111"
输出:4

样例3:

输入:s = "1234567890"
输出:0

问题分析

要解决这个问题,我们需要确保字符串中没有连续相同的字符。我们可以通过以下步骤来实现:

解题思路

  1. 理解问题

    • 我们需要计算最少需要多少次修改,才能使字符串中没有连续相同的字符。
    • 例如,对于字符串 "111222333",我们需要将其修改为 "121212312",这样就没有连续相同的字符了。
  2. 遍历字符串

    • 从第二个字符开始,逐个检查当前字符是否与前一个字符相同。
    • 使用一个循环来遍历字符串,从索引1开始(即第二个字符)。
  3. 计数修改

    • 如果当前字符与前一个字符相同,则需要进行一次修改,并将计数器加1。
    • 例如,在字符串 "111222333" 中,第一个 "11" 需要修改一次,第二个 "22" 需要修改一次,第三个 "33" 需要修改一次。
  4. 跳过连续字符

    • 在发现连续相同的字符时,我们可以跳过这些字符,因为它们已经被修改了。
    • 例如,在字符串 "111222333" 中,发现 "11" 后,我们可以跳过第二个 "1",继续检查后面的字符。
  5. 返回结果

    • 最后返回计数器的值,即为最少需要修改的次数。
    • 例如,对于字符串 "111222333",最少需要修改3次。

代码分析

  1. 初始化计数器

    • 你需要一个计数器来记录修改的次数。
  2. 遍历字符串

    • 使用一个循环从第二个字符开始遍历字符串。
  3. 检查连续字符

    • 在循环中,检查当前字符是否与前一个字符相同。
  4. 计数修改

    • 如果当前字符与前一个字符相同,则增加计数器,并跳过当前字符。
  5. 返回结果

    • 最后返回计数器的值

代码框架

    changes = 0  # 初始化计数器
    i = 1  # 从第二个字符开始遍历
    while i < len(s):
        if s[i] == s[i - 1]:  # 检查当前字符是否与前一个字符相同
            changes += 1  # 增加计数器
            # 跳过当前字符,因为它已经被修改了
            i += 1  # 跳过当前字符
        i += 1  # 继续检查下一个字符
    return changes  # 返回计数器的值

# 测试样例
print(solution("111222333"))  # 输出:3
print(solution("11551111"))   # 输出:4
print(solution("1234567890")) # 输出:0

关键步骤解释

  1. 初始化计数器

    • changes = 0:初始化一个计数器,用于记录修改的次数。
  2. 遍历字符串

    • i = 1:从第二个字符开始遍历。
    • while i < len(s)::使用循环遍历字符串。
  3. 检查连续字符

    • if s[i] == s[i - 1]::检查当前字符是否与前一个字符相同。
  4. 计数修改

    • changes += 1:如果当前字符与前一个字符相同,则增加计数器。
    • i += 1:跳过当前字符,因为它已经被修改了。
  5. 返回结果

    • return changes:返回计数器的值。

实现代码

    changes = 0
    i = 1
    while i < len(s):
        if s[i] == s[i - 1]:
            changes += 1
            # 跳过当前字符,因为它已经被修改了
            i += 1
        i += 1
    return changes

# 测试样例
print(solution("111222333"))  # 输出:3
print(solution("11551111"))   # 输出:4
print(solution("1234567890")) # 输出:0

总结与反思

这道题主要考察以下几个编程和算法方面的知识点:

  1. 字符串操作

    • 遍历字符串:通过索引访问字符串中的每个字符。
    • 比较字符:检查当前字符是否与前一个字符相同。
  2. 计数器和循环

    • 使用计数器来记录需要进行的修改次数。
    • 使用循环来遍历字符串,并在发现连续相同的字符时进行计数。
  3. 逻辑判断

    • 在循环中进行逻辑判断,确定是否需要进行修改。
    • 根据判断结果更新计数器。
  4. 边界条件处理

    • 处理字符串的边界条件,确保不会越界访问字符串。
    • 例如,从第二个字符开始遍历,避免索引越界。
  5. 算法优化

    • 通过跳过连续相同的字符来优化算法,减少不必要的比较次数。