在LeetCode上刷一道题,题目如下:

3. 无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的?最长子串?的长度。

示例?1:

输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是?"wke",所以其长度为 3。
?

请注意,你的答案必须是 子串 的长度,"pwke"?是一个子序列,不是子串。

我想到,如果忽略重复的情况,纯对无符号字符串进行分词,是怎么做的?

考虑了一下,思路比较简单:

先从单个字符开始,统计词频,然后对词频大于1的进行扩展,扩展处理的词长为2的,再统计词频,然后如此类推,一致推到所有的最高长度词都词频为1了,才结束。

如图所示:

最终代码如下:

#该函数为,i为扩充出的词的长度,i=2,就是ab,bc,de这种两个长度的词;
#然后在sc中找值不为1的键值对,检查长度为i的键在s中出现后续词的数量,并插入到sc字典中
#返回此层结果的最大词频
def fillSc(sc:dict,s:list,i:int)->int:
maxlens=0 #最大词频
if len(sc)==0: #如果sc字典为空,则开始把单字进行填充
for b in s:
sc[b]= s.count(b)
if s.count(b)>maxlens: #判断该词频率,如果频率是最高的,就保存下来
maxlens=s.count(b)
else: #否则在sc字典中找到词长为i的词,进行探索
for x in list(sc.keys()):
if len(x)!=i: #如果为词长与预设不符,则不再继续,而是跳过
continue
else:
m=int(sc[x]) #m为词x出现的次数
if m>1:#词频为1的,不再处理,只处理词频高于1的
n=0 #取词的位置
for k in range(0,m,1):
if s.index(x,n,)+len(x)<len(s)-1: #判断是否到了s字符串的结尾
x1=x+s[s.index(x,n,)+len(x)] #形成后续词,即x为ab时,取abc,如果存在多个ab,则接连取
n=s.index(x,n,)+len(x)#后续词出现的位置
sc[x1]=s.count(x1)#补充进sc列表
if s.count(x1)>maxlens: #判断该词频率,如果频率是最高的,就保存下来
maxlens=s.count(x1) return maxlens s="abcabcbb" #原始字符串
sc={} #空字典,用于存储分出来的词和词频
i=0 #当前层数,也就是当前词的长度,例如a是1,ab是2,abc是3
maxl=2 #最大词频数,初始值设置为2,是为了避免while循环不启动
while maxl>1:
maxl=fillSc(sc,s,i)
i=i+1
for x in list(sc.keys()): #将sc字典中的全部输出
print(x,",",sc[x])

输出结果如下:

a , 2
b , 4
c , 2
ab , 2
bc , 2
ca , 1
cb , 1
abc , 2
bca , 1
bcb , 1
abca , 1
abcb , 1

心得体会如下:

1、对python的语法和方法还是不熟悉,导致了非常大的麻烦,经过这个例子,对字典的理解更深入了,虽然感觉不如c#的对应类型好用。

2、代码编辑器很麻烦,开始用vscode怎么也配置不上,重装了后,没有自动代码提示,也没有代码颜色高亮等,等再配置完了,这些有了,但代码执行不起来了,提示有空行在核心代码库里面。最后只能重装了anaconda3,直接用spyder来写,调试和代码执行也很麻烦。如果用vs和c#来写,估计连四分之一的时间都用不了。

LeetCode的一道题引申的python实现的对字符串进行分词,提取词频的方法的更多相关文章

  1. Python 整数 长整数 浮点数 字符串 列表 元组 字典的各种方法

    对于Python, 一切事物都是对象,对象基于类创建!! 注:查看对象相关成员var,type, dir 一.整数 如: 18.73.84 每一个整数都具备如下需要知道的功能: def bit_len ...

  2. Python大数据:jieba 中文分词,词频统计

    # -*- coding: UTF-8 -*- import sys import numpy as np import pandas as pd import jieba import jieba. ...

  3. leetcode 刷500道题,笔试/面试稳过吗?谈一谈这些年来算法的学习

    想要学习算法.应付笔试或者应付面试手撕算法题,相信大部分人都会去刷 Leetcode,有读者问?如果我在 leetcode 坚持刷它个 500 道题,以后笔试/面试稳吗? 这里我说下我的个人看法,我认 ...

  4. python获取字母在字母表对应位置的几种方法及性能对比较

    python获取字母在字母表对应位置的几种方法及性能对比较 某些情况下要求我们查出字母在字母表中的顺序,A = 1,B = 2 , C = 3, 以此类推,比如这道题目 https://project ...

  5. Python:常见操作字符串的函数

    Python中提供了很多操作字符串的函数: string = "hello, my dear python!" string.capitalize() #将字符串中的第一个字母大写 ...

  6. Python内置的字符串处理函数整理

    Python内置的字符串处理函数整理 作者: 字体:[增加 减小] 类型:转载 时间:2013-01-29我要评论 Python内置的字符串处理函数整理,收集常用的Python 内置的各种字符串处理 ...

  7. python字符串替换的2种有效方法

    python 字符串替换可以用2种方法实现:1是用字符串本身的方法.2用正则来替换字符串 下面用个例子来实验下:a = 'hello word'我把a字符串里的word替换为python1用字符串本身 ...

  8. python面对对象编程------4:类基本的特殊方法__str__,__repr__,__hash__,__new__,__bool__,6大比较方法

    一:string相关:__str__(),__repr__(),__format__() str方法更面向人类阅读,print()使用的就是str repr方法更面对python,目标是希望生成一个放 ...

  9. Python同时向控制台和文件输出日志logging的方法 Python logging模块详解

    Python同时向控制台和文件输出日志logging的方法http://www.jb51.net/article/66756.htm 1 #-*- coding:utf-8 -*- 2 import ...

随机推荐

  1. jmeter设置代理服务器录制脚本

    新建测试计划之后: 1.添加非测试元件:HTTP代理服务器 a.其中目标控制器可以控制选哪个线程放录制的脚本: b.将端口设置为8888或者其他不常用的端口,保持跟其他应用的端口不一致,否则被占用导致 ...

  2. 深度学习Keras框架笔记之Dense类(标准的一维全连接层)

    深度学习Keras框架笔记之Dense类(标准的一维全连接层) 例: keras.layers.core.Dense(output_dim,init='glorot_uniform', activat ...

  3. Sliding Window Matrix Maximum

    Description Given an array of n * m matrix, and a moving matrix window (size k * k), move the window ...

  4. springcloud(二)

    springcloud路由网关 一.什么是网关 Zuul的主要功能是路由转发和过滤器.路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务.zu ...

  5. java实现ssh登录linux服务器并下发命令

    依赖jar包:jsch-0.1.55.jar   commons-io-2.5.jar import com.jcraft.jsch.ChannelExec; import com.jcraft.js ...

  6. c博客06-结构

    1.本章学习总结(2分) 1.1 学习内容总结 结构体如何定义.成员如何赋值 结构体数组排序做法 结构体指针怎么用 共用体.枚举类型做法 文件读写,文件中数据如何读进结构体数组 1.2 本章学习体会 ...

  7. 转载:Databricks孟祥瑞:ALS 在 Spark MLlib 中的实现

    Databricks孟祥瑞:ALS 在 Spark MLlib 中的实现 发表于2015-05-07 21:58| 10255次阅读| 来源<程序员>电子刊| 9 条评论| 作者孟祥瑞 大 ...

  8. 第06组 Alpha冲刺(2/4)

    队名:福大帮 组长博客链接:https://www.cnblogs.com/mhq-mhq/p/11885037.html 作业博客 :https://edu.cnblogs.com/campus/f ...

  9. 第09组 Beta冲刺(1/4)

    队名:软工9组 组长博客:https://www.cnblogs.com/cmlei/ 作业博客:https://edu.cnblogs.com/campus/fzu/SoftwareEngineer ...

  10. 共线性图 | Alluvial Diagrams | Parallel plot | Parallel Coordinates Plot

    最近有个需求需要画如下的图: 这些图的核心意思是一样的,就是connection,把不同的数据连到一起. 文章里把这图叫做共线性图,是按功能命名的,Google里搜不到. 搜到类似的,这个图叫 Par ...