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

LeetCode | 1624.两个相同字符之间的最长子字符串

在这里插入图片描述

这道题拿到手想法就是去双重遍历暴力解,对于每个字符,从后往前遍历字符串,找到从后往前一直到本次遍历的这个字符串这段子串中和这个字符串相同的字符位置,然后得到子字符串的长度,和ans存储的值做一个比较,如果比ans值大就更新,小就舍弃。时间复杂度 O ( n 2 ) O(n^2) O(n2)

class Solution(object):def maxLengthBetweenEqualCharacters(self, s):""":type s: str:rtype: int"""ans = -1for i in range(len(s)):for j in range(len(s) - 1, -1, -1):if s[i] == s[j] and i <= j:ans = j - i - 1 if j - i - 1 > ans else ansreturn ans

在这里插入图片描述
题解的方法更为巧妙,对于字符ch,只需要求出ch第一次出现在字符串中的索引位置first 和最后一次出现在字符串中的索引位置last,则以ch为相同字符之间的子字符串的最大长度一定为last−first−1,我们依次求出所有可能的子字符的长度的最大值即可。设数组firstIndex记录每个字符i在字符串中第一次出现的索引,maxLength表示当前子字符串的最大长度。
首先我们开辟一个长度为26的数组,初始值都是-1,表示该字符还未出现过,然后开始遍历整个字符串,当遇到一个字符时,判断其是否出现过,也就是其值是否为-1,如果是,证明是第一次出现,更新其值为其对应索引firstIndex[c] = i即可,如果其值不是-1,则证明这个数字已经出现过了,则计算i - firstIndex[c] - 1,同时和ans比较,若大则更新ans即可。时间复杂度 O ( n ) O(n) O(n)

class Solution:def maxLengthBetweenEqualCharacters(self, s: str) -> int:ans = -1firstIndex = {}for i, c in enumerate(s):  # enumerate 函数用于同时获取一个可迭代对象的索引和值if c not in firstIndex:firstIndex[c] = ielse:ans = max(ans, i - firstIndex[c] - 1)return ans
http://www.lryc.cn/news/367837.html

相关文章:

  • 【CS.AI】GPT-4o:重新定义人工智能的新标杆
  • 野火FPGA跟练(四)——串口RS232、亚稳态
  • Qt for Android 申请摄像头权限
  • kivy 百词斩项目 报错
  • ChatTTS 文字生成语言本地模型部署
  • 多曝光融合算法(三)cv2.createAlignMTB()多曝光图像融合的像素匹配问题
  • C/C++|类型推导中的模式匹配
  • The 18th Northeast Collegiate Programming Contest(5/9/13)
  • Vue前端在线预览文件插件
  • 【ai】Audio2Face
  • 2024.6.9 一
  • 地图之战争迷雾/地图算法/自动导航(一)
  • 【wiki知识库】06.文档管理页面的添加--前端Vue部分
  • 新电脑必装的7款软件,缺一不可
  • 程序员学习Processing和TouchDesigner视觉编程相关工具
  • gitlabcicd-k8s部署gitlab
  • 浅谈JDBC
  • 【数据结构初阶】--- 顺序表
  • 一个完整的java项目通常包含哪些层次(很全面)
  • 设置电脑定时关机
  • Java 编译报错:找不到符号? 手把手教你排查解决!
  • Gitte的使用(Windows/Linux)
  • c++之旅第十弹——IO流
  • 量化交易:Miniqmt获取可转债数据和交易python代码
  • 测试开发之自动化篇 —— 使用Selenium IDE录制脚本!
  • Django 外键关联数据
  • 开源与新质生产力
  • 如何将 Windows图片查看器的背景颜色改成浅色(灰白色)?
  • k8s-pod参数详解
  • 一些计算机网络面试题