青训营X豆包MarsCode 技术训练营第十二课 | 豆包MarsCode AI 刷题

40 阅读3分钟

第476题 相邻字母匹配计数问题

1.题目分析

给定一个包含大小写字母的字符串 s,要求忽略字母的大小写,找出字符串中所有相邻字符相等的对数。即,我们要计算在忽略大小写的情况下,有多少对相邻的字母是相等的。

示例分析

  • 示例 1:"aABbbC":忽略大小写后,相邻字母中 "aA"、"AB" 和 "bb" 是相等的,因此答案是 3。
  • 示例 2:"XYZxyZ":在忽略大小写后,字符串中的没有相邻的字母是相等的,因此答案是 0。
  • 示例 3:"AaBbCc":忽略大小写后,相邻字母 "Aa"、"Bb" 和 "Cc" 都是相等的,因此答案是 3。

2.解题思路

思路概述

  1. 忽略大小写:题目要求忽略字母的大小写,我们可以通过将字符串的每个字母都转换成统一的大小写(通常是小写),来消除大小写差异。
  2. 遍历相邻字符:我们只需要遍历字符串中的每一对相邻字符,检查它们是否相等。如果相等,则计数。
  3. 返回计数:在遍历结束后,返回相邻字符相等的对数。

具体步骤

  1. 字符串转换为小写:我们可以使用 Python 中的 lower() 方法,将整个字符串转换为小写字母。
  2. 遍历字符串中的相邻字符:我们使用一个循环,从字符串的第二个字符开始,依次与前一个字符进行比较。
  3. 统计相等对数:如果当前字符与前一个字符相等,则增加计数。
  4. 返回结果:遍历完成后,返回计数值。

3.解题代码

def solution(s: str) -> int:
    s = s.lower()
    count = 0
    
    # 遍历字符串,检查每一对相邻的字符
    for i in range(1, len(s)):
        if s[i] == s[i - 1]:
            count += 1
    
    return count

if __name__ == '__main__':
    print(solution("aABbbC") == 3)
    print(solution("XYZxyZ") == 0)
    print(solution("AaBbCc") == 3)

4.模块解释

  • s.lower() :该方法将字符串中的所有字母转换为小写形式,从而使大小写字母的比较变得统一。这样,我们就可以忽略大小写进行比较。

  • for i in range(1, len(s)) :使用 for 循环遍历字符串,从第二个字符(索引 1)开始与前一个字符进行比较。range(1, len(s)) 表示从索引 1 开始到字符串的末尾。

  • if s[i] == s[i - 1] :检查当前字符 s[i] 是否与前一个字符 s[i-1] 相等。如果相等,则增加计数器 count

  • return count:最终返回相邻字符相等的对数,即我们最终的结果。

5.结论

通过上述思路和实现,我们得到了一个高效的解决方案。该算法的时间复杂度是 O(n)O(n)O(n),其中 nnn 是字符串的长度,因为我们只遍历了一次字符串进行比较。

总结

  • 我们首先将字符串转换为小写,确保在比较时忽略大小写的差异。
  • 然后通过遍历字符串的相邻字符,检查它们是否相等。
  • 最后返回相邻字符相等的对数。

这种方法简单且高效,适合处理较长的字符串,能够满足题目要求的时间复杂度。