【python-leetcode340-滑动窗口法】至多包含 K 个不同字符的最长子串
时间:2022-07-23
本文章向大家介绍【python-leetcode340-滑动窗口法】至多包含 K 个不同字符的最长子串,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
问题描述:给定一个字符串s,找到至多包含k个不同字符得最长子串的长度。
比如s="cebea",k=2,那么输出结果就是3,因为此时"ebe"满足条件:至多包含两个不同字符,且子串最长
比如s="world",k=4,那么输出结果就是4,因为"worl"和"orld"满足条件:至多包含4个不同字符,且子串最长
class Solution:
def lengthOfLongestSubstringKDistinct(self, s, k):
tmp = 0 #用于记录满足条件得最大值
for i in range(1,len(s)+1):#步长从1到len(s)+1
for j in range(len(s)-i+1):#窗口左端
print(s[j:j+i])
if len(set(s[j:j+i])) == k:#如果窗口中取集合后的不同字符就是k个
tmp = max(tmp,i)#更新tmp的值
print("tmp:{}".format(tmp))
return tmp #最后返回即可
过程:
c e b e a ce tmp:2 eb tmp:2 be tmp:2 ea tmp:2 ceb ebe tmp:3 bea cebe ebea cebea
第二种方法:
思路: 一个hash表和一个左边界标记. 遍历字符串将其加入到hash表中, 不同字符多于k个了, 就从左边开始删字符. 直到hash表不同字符长度等于k.此时字符串的长度就是当前字符和左边界的距离。
class Solution:
def lengthOfLongestSubstringKDistinct(self,s,k):
from collections import defaultdict
#使用python中的collections.defaultdict
#字典中存储的整型的值默认为0
hash = defaultdict(int)
max_num = 0 #用于存放最大值
start = 0 #滑动窗口的左端
#从字符串左开始遍历
for i in range(len(s)):
#遍历到一个字符,使得字典中对应得字符加1
hash[s[i]] += 1
while len(hash)>k:
hash[s[start]] -= 1
if hash[s[start]] == 0:
del hash[s[start]]
start += 1
max_num = max(max_num,i-start+1)
return max_num
由于leetcode没会员,不能解锁,不能保证能过。但思路应该没问题。
- 用XGBoost做时间序列预测—forecastxgb包
- 数据挖掘算法(logistic回归,随机森林,GBDT和xgboost)
- 关于修改数据库参数的测试(r3笔记第18天)
- 50多条实用mysql数据库优化建议
- 关于查询转换的一些简单分析(一) (r3笔记第37天)
- 简单实用的sql小技巧(第一篇) (r3笔记第36天)
- 关于修改分区表的问题总结 (r3笔记35天)
- 利用Python绘制MySQL数据图实现数据可视化
- 生产环境sql语句调优实战第九篇(r3笔记第34天)
- python数据分析之股票实战
- 使用Python编写网络爬虫抓取视频下载资源
- 通过shell定制ash脚本(r3笔记第33天)
- 使用shell定制awr脚本(r3笔记第32天)
- 用python对人们使用自行车情况分析与预测
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 快速掌握shell脚本的各种循环语句
- 详解shell脚本的4种表达式
- Linux shell中这7种运算命令值得掌握!
- 快速掌握shell脚本数组,看这篇
- 详解shell脚本的环境、普通、特殊变量
- 玩转zabbix之超详细的二进制安装
- 玩转zabbix之源码编译安装,添加主机监控
- 总结一篇shell调试技巧及常见的脚本错误
- 备战金九银十:当你裸辞遇到了面试难,你需要了解一下这些面试题
- 看完这7个测试常见问题总结,你的面试就成功了80%
- geant4入门讲解篇-2
- Geant4-怎样设置你的粒子源--精简注释+收藏版
- Geant4--一次编译,运行多个Run,极大提升模拟效率
- Geant4--是怎样使用的?--(1.信息抽取)
- ROOT-数据读取-直方图-Roofit拟合基本流程-(入门实用)