青训营X豆包MarsCode技术训练营|豆包MarsCode AI刷题

48 阅读3分钟

今天来道中等题(其实是简单题的难度) 相邻字母匹配计数问题

问题描述

小F有一个由大写字母和小写字母组成的字符串。她想知道,在忽略字母大小写的情况下,有多少对相邻的字母是相等的。

例如,对于字符串 "aABbbC",在忽略大小写的情况下,有 3 对相邻字母是相等的,分别是 "aA""AB""bb"


测试样例

样例1:

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

样例2:

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

样例3:

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

还是老规矩 简单分析一哈

我们需要统计在忽略字母大小写后,相邻字母是否相等的对数。解题的关键步骤可以分为以下几个:

  1. 忽略大小写:首先,我们要忽略字母的大小写进行比较,转换字母的大小写可以通过将字符统一转换为小写或大写来实现。

  2. 遍历字符串并比较相邻字符:遍历字符串中的相邻字符对,比较它们是否相等。这里的比较是忽略大小写的。(这里写个判断就欧克了)

  3. 统计相等对数:每次相邻字符相等时,计数器加一,最后输出总计数。(这里用循环就很简单了)

关键知识点

1. 字符大小写转换

要忽略字母的大小写,我们需要将字符统一转换为同一个大小写。Python提供了两种方法:

  • lower():将字符或字符串转换为小写。
  • upper():将字符或字符串转换为大写。

例如,'a'.lower() 返回 'a''A'.lower() 也返回 'a'

2. 遍历字符串

我们可以通过循环遍历字符串中的相邻字符对,并进行比较。对于每个相邻的字符对(s[i]s[i+1]),将它们转换成统一的大小写后进行比较。

3. 计数器的使用

定义一个变量 count 来统计相等的字符对。每次找到相等的字符对,就将 count 增加 1。

详细步骤

  1. 初始化计数器:首先定义一个计数器 count,用于统计相邻相等的字母对。

  2. 遍历字符串:使用一个循环,从字符串的第一个字符到倒数第二个字符进行遍历。

  3. 转换字符为统一大小写:对于每一对相邻字符 s[i]s[i+1],将它们转换为小写(或大写)后进行比较。

  4. 更新计数器:如果转换后的两个字符相等,增加计数器 count

  5. 输出结果:遍历完成后,输出 count

示例分析

示例 1

输入:s = "aABbbC"

  1. 统一转换为小写:"aABbbC" -> "aabbbc"
  2. 比较相邻字符:
    • 比较 'a''a' -> 相等,count = 1
    • 比较 'a''b' -> 不相等,count 不变
    • 比较 'b''b' -> 相等,count = 2
    • 比较 'b''b' -> 相等,count = 3
    • 比较 'b''c' -> 不相等,count 不变
  3. 最终输出 count = 3

示例 2

输入:s = "XYZxyZ"

  1. 统一转换为小写:"XYZxyZ" -> "xyzxyz"
  2. 比较相邻字符:
    • 比较 'x''y' -> 不相等,count 不变
    • 比较 'y''z' -> 不相等,count 不变
    • 比较 'z''x' -> 不相等,count 不变
    • 比较 'x''y' -> 不相等,count 不变
    • 比较 'y''z' -> 不相等,count 不变
  3. 最终输出 count = 0

代码实现

def solution(s: str):
    # 将字符串转换为小写
    s = s.lower()
    
    # 初始化计数器
    count = 0
    
    # 遍历字符串,检查每一对相邻字符
    for i in range(len(s) - 1):
        if s[i] == s[i + 1]:
            count += 1
    
    # 返回最终的计数
    return count