第 114 题:找出字符串中连续出现最多的字符和个数

解题思路

为了找出字符串中连续出现最多的字符及其个数,我们可以采用一次遍历的方法。通过记录当前字符及其连续出现的次数,同时更新最大字符和最大次数,最终返回结果。

具体步骤

  1. 初始化变量:我们需要一个变量来记录当前字符、当前字符出现的次数、最大字符以及最大出现次数。
  2. 遍历字符串 :逐个字符检查:
    • 如果当前字符与前一个字符相同,增加当前计数。
    • 如果不同,比较当前计数与最大计数,更新最大字符和最大计数,然后重置当前字符及计数。
  3. 最后检查:遍历结束后,需再次检查以确保最后的字符计数被考虑在内。
  4. 返回结果

代码实现

下面是用 Python 实现的代码示例:

python 复制代码
def max_consecutive_char(s: str) -> (str, int):
    if not s:  # 如果字符串为空,返回空字符和0
        return "", 0
    
    max_char = s[0]  # 初始化最大字符
    max_count = 1    # 初始化最大计数
    current_char = s[0]  # 当前字符
    current_count = 1      # 当前计数

    for i in range(1, len(s)):
        if s[i] == current_char:  # 当前字符与上一个字符相同
            current_count += 1
        else:  # 当前字符不同
            if current_count > max_count:  # 更新最大字符和计数
                max_char = current_char
                max_count = current_count
            current_char = s[i]  # 更新当前字符
            current_count = 1     # 重置当前计数

    # 最后检查一次
    if current_count > max_count:
        max_char = current_char
        max_count = current_count

    return max_char, max_count

# 示例
s = "aaabbccaaaddddd"
result = max_consecutive_char(s)
print(f"字符: {result[0]}, 个数: {result[1]}")

代码解析

  • 函数定义max_consecutive_char(s: str) -> (str, int) 定义了一个接受字符串并返回字符及其个数的函数。
  • 边界条件:首先检查字符串是否为空,若为空则直接返回空字符和0。
  • 初始化 :使用 max_charmax_count 记录最大字符和最大出现次数,current_charcurrent_count 用于跟踪当前字符及其计数。
  • 遍历字符串:在循环中,根据当前字符与前一个字符是否相同来更新计数。
  • 最终检查 :循环结束后,检查最后的 current_count 是否大于 max_count,以确保最后的字符统计被考虑。

复杂度分析

  • 时间复杂度:O(n),其中 n 是字符串的长度。我们只遍历了一次字符串。
  • 空间复杂度:O(1),只使用了常数大小的额外空间。

总结

通过这个方法,我们可以高效地找出字符串中连续出现最多的字符和个数。这个算法简单易懂,且性能优越,适用于处理较长的字符串。

相关推荐
火柴就是我8 小时前
从头写一个自己的app
android·前端·flutter
FinClip8 小时前
小程序如何一键生成鸿蒙APP?FinClip助力企业快速布局Harmony OS生态
前端
月下点灯9 小时前
🔄记住这张图,脑子跟着浏览器的事件循环(Event Loop)转起来了
前端·javascript·浏览器
邹小邹-AI9 小时前
Rust + 前端:下一个十年的“王炸组合”
开发语言·前端·rust
行走在顶尖9 小时前
vue3+ant-design-vue
前端
百***35489 小时前
JavaScript在Node.js中的集群部署
开发语言·javascript·node.js
光影少年9 小时前
node.js和nest.js做智能体开发需要会哪些东西
开发语言·javascript·人工智能·node.js
华仔啊9 小时前
图片标签用 img 还是 picture?很多人彻底弄混了!
前端·html
lichong9519 小时前
XLog debug 开启打印日志,release 关闭打印日志
android·java·前端
南山安9 小时前
栈(Stack):从“弹夹”到算法面试题的进阶之路
javascript·算法·面试