当前位置: 首页 > article >正文

字节青训-找出最长的神奇数列

问题描述

小F是一个好学的中学生,今天他学习了数列的概念。他在纸上写下了一个由 0 和 1 组成的正整数序列,长度为 n。这个序列中的 1 和 0 交替出现,且至少由 3 个连续的 0 和 1 组成的部分数列称为「神奇数列」。例如,10101 是一个神奇数列,而 1011 不是。现在,小F想知道在这个序列中,最长的「神奇数列」是哪一个。你能帮他找到吗?

如果有多个神奇数列,那么输出最先出现的一个。

测试样例

样例1:

输入:inp = "0101011101"
输出:'010101'

样例2:

输入:inp = "1110101010000"
输出:'10101010'

样例3:

输入:inp = "1010101010101010"
输出:'1010101010101010'

 

 解题思路:

问题理解

我们需要在一个由 0 和 1 组成的字符串中找到最长的「神奇数列」。神奇数列的定义是:

  • 由 0 和 1 交替出现。
  • 至少由 3 个连续的 0 和 1 组成。

数据结构选择

我们可以直接使用字符串来处理这个问题,因为输入和输出都是字符串。

算法步骤

  1. 初始化变量

    • maxlist 用于存储最长的神奇数列。
    • maxLength 用于记录最长神奇数列的长度。
    • start 用于记录当前神奇数列的起始位置。
    • currentLength 用于记录当前神奇数列的长度。
  2. 遍历字符串

    • 从第二个字符开始遍历字符串。
    • 如果当前字符与前一个字符不同,说明仍然是交替的,增加 currentLength
    • 如果当前字符与前一个字符相同,说明交替中断,检查当前神奇数列的长度是否大于等于3,如果是,则更新 maxlist 和 maxLength。然后重置 start 和 currentLength
  3. 处理最后一段神奇数列

    • 在遍历结束后,检查最后一段神奇数列的长度是否大于等于3,如果是,则更新 maxlist 和 maxLength
  4. 返回结果

    • 返回 maxlist,即最长的神奇数列。

最终代码:

def solution(inp):
    maxlist = ""  # 用于存储最长的神奇数列
    maxLength = 0  # 最长神奇数列的长度
    n = len(inp)  # 输入字符串的长度

    # 当前神奇数列的起始位置和长度
    start = 0
    currentLength = 1

    for i in range(1, n):
        if inp[i] != inp[i - 1]:  # 当前字符与前一个字符不同
            currentLength += 1  # 更新当前神奇数列的长度
        else:
            # 如果当前长度大于等于3,检查是否需要更新最长的神奇数列
            if currentLength >= 3:
                candidate = inp[start:start + currentLength]
                if currentLength > maxLength:
                    maxLength = currentLength
                    maxlist = candidate  # 更新最长神奇数列

            # 重置当前神奇数列
            start = i
            currentLength = 1  # 重新计数

    # 处理最后一段神奇数列
    if currentLength >= 3:
        candidate = inp[start:start + currentLength]
        if currentLength > maxLength:
            maxlist = candidate  # 更新最长神奇数列

    return maxlist  # 返回最长的神奇数列


if __name__ == "__main__":
    # 添加测试用例
    print(solution("0101011101") == "010101")

运行结果:


http://www.kler.cn/a/372370.html

相关文章:

  • 119.【C语言】数据结构之快速排序(调用库函数)
  • 【Ubuntu】如何轻松在Apache服务器上部署Laravel博客系统
  • 前端往后端传递参数的方式有哪些?
  • 【模电刷题复习--选择】
  • PS等软件学习笔记
  • SpringBoot配置文件、热部署、YAML语法、配置文件值注入
  • 【数据结构】快速排序(三种实现方式)
  • 【机器学习】Lesson3 - 逻辑回归(LR)二分类
  • VBA语言専攻介绍20241031
  • 用户统计开发思路
  • aarch64-opencv341交叉编译,并在arm上部署helloopencv
  • 【灯光数据最新整理】 2000至2023年“NPP-VIIRS“夜间灯光数据(500m分辨率)-最新出炉_附下载链接
  • HCIP--以太网交换安全(总实验)
  • ssm基于web的网络游戏交易平台信息管理系统的设计与实现+vue
  • Linux_02 Linux常用软件——vi、vim
  • 从0开始深度学习(22)——从全连接层到卷积
  • 【牛客算法】某司面试算法题:循环右移二叉树
  • 2024 CCF CSP-J/S 2024 第二轮认证 真题试卷
  • ubuntu下快捷键启动程序
  • Kotlin学习第三课
  • WPF入门_07模板控件
  • 2. STM32 HAL库MDK工程模板创建
  • JavaFx -- chapter05(多用户服务器)
  • C++ 模板专题 - 标签分派(Tag Dispatching)
  • Spring Boot与Web技术的酒店客房服务管理系统
  • 深入理解C++ Lambda表达式:语法、用法与原理及其包装器的使用