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

总结

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

相关推荐
Nan_Shu_61414 分钟前
学习: Threejs (2)
前端·javascript·学习
G_G#22 分钟前
纯前端js插件实现同一浏览器控制只允许打开一个标签,处理session变更问题
前端·javascript·浏览器标签页通信·只允许一个标签页
@大迁世界38 分钟前
TypeScript 的本质并非类型,而是信任
开发语言·前端·javascript·typescript·ecmascript
GIS之路1 小时前
GDAL 实现矢量裁剪
前端·python·信息可视化
是一个Bug1 小时前
后端开发者视角的前端开发面试题清单(50道)
前端
Amumu121381 小时前
React面向组件编程
开发语言·前端·javascript
持续升级打怪中1 小时前
Vue3 中虚拟滚动与分页加载的实现原理与实践
前端·性能优化
GIS之路1 小时前
GDAL 实现矢量合并
前端
hxjhnct1 小时前
React useContext的缺陷
前端·react.js·前端框架
冰暮流星1 小时前
javascript逻辑运算符
开发语言·javascript·ecmascript