第 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),只使用了常数大小的额外空间。

总结

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

相关推荐
小白上线*^_^*6 分钟前
Vue——Axios
前端·javascript·vue.js
一直在学习的小白~23 分钟前
HTML字符串转换为React元素实现
前端·react.js·html
gxn_mmf39 分钟前
典籍知识问答模块AI问答功能feedbackBug修改+添加对话名称修改功能
前端·后端·bug
sunbyte1 小时前
Three.js + React 实战系列 - 客户评价区细解教程 Clients 组件✨(回答式评价 + 评分星级)
开发语言·javascript·react.js
marvindev1 小时前
提bug测试专用
开发语言·javascript·bug
samroom1 小时前
Webpack基本用法学习总结
前端·学习·webpack
万能程序员-传康Kk2 小时前
食物数据分析系统vue+flask
前端·vue.js·flask
老猿阿浪2 小时前
JavaScript性能优化:从青铜到王者的进阶之路
开发语言·javascript·性能优化
老华带你飞3 小时前
音乐网站|基于SprinBoot+vue的音乐网站(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·音乐网站
界面开发小八哥3 小时前
DevExtreme JS & ASP.NET Core v25.1新功能预览 - 全新的Stepper组件
javascript·asp.net·界面控件·devexpress·ui开发·devextreme