第476题 相邻字母匹配计数问题
1.题目分析
给定一个包含大小写字母的字符串 s,要求忽略字母的大小写,找出字符串中所有相邻字符相等的对数。即,我们要计算在忽略大小写的情况下,有多少对相邻的字母是相等的。
示例分析:
- 示例 1:"aABbbC":忽略大小写后,相邻字母中 "aA"、"AB" 和 "bb" 是相等的,因此答案是 3。
- 示例 2:"XYZxyZ":在忽略大小写后,字符串中的没有相邻的字母是相等的,因此答案是 0。
- 示例 3:"AaBbCc":忽略大小写后,相邻字母 "Aa"、"Bb" 和 "Cc" 都是相等的,因此答案是 3。
2.解题思路
思路概述:
- 忽略大小写:题目要求忽略字母的大小写,我们可以通过将字符串的每个字母都转换成统一的大小写(通常是小写),来消除大小写差异。
- 遍历相邻字符:我们只需要遍历字符串中的每一对相邻字符,检查它们是否相等。如果相等,则计数。
- 返回计数:在遍历结束后,返回相邻字符相等的对数。
具体步骤:
- 字符串转换为小写:我们可以使用 Python 中的
lower()方法,将整个字符串转换为小写字母。 - 遍历字符串中的相邻字符:我们使用一个循环,从字符串的第二个字符开始,依次与前一个字符进行比较。
- 统计相等对数:如果当前字符与前一个字符相等,则增加计数。
- 返回结果:遍历完成后,返回计数值。
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 是字符串的长度,因为我们只遍历了一次字符串进行比较。
总结:
- 我们首先将字符串转换为小写,确保在比较时忽略大小写的差异。
- 然后通过遍历字符串的相邻字符,检查它们是否相等。
- 最后返回相邻字符相等的对数。
这种方法简单且高效,适合处理较长的字符串,能够满足题目要求的时间复杂度。