问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在原串中找到最长的每个字母最多出现一次的字符串 用python怎么写

发布网友 发布时间:2022-04-18 05:40

我来回答

2个回答

懂视网 时间:2022-04-18 10:01

这篇文章主要介绍了Python实现针对给定字符串寻找最长非重复子串的方法,涉及Python针对字符串的遍历、排序、计算等相关操作技巧,需要的朋友可以参考下

本文实例讲述了Python实现针对给定字符串寻找最长非重复子串的方法。分享给大家供大家参考,具体如下:

问题:

给定一个字符串,寻找其中最长的重复子序列,如果字符串是单个字符组成的话如“aaaaaaaaaaaaa”那么满足要求的输出就是a

思路:

这里的思路有两种是我能想到的

(1)从头开始遍历字符串,设置标志位,在往后走的过程中当发现和之前标志位重合的时候就回头检查一下这个新出现的子串是否跟前面字符串或者前面字符串的子串相同,相同则记录该子串并计数加1,直至处理完毕

(2)利用滑窗切片的机制,生成所有的切片接下来统计和处理,主要利用到了两次排序的功能

本文采用的是第二种方法,下面是具体实现:


#!usr/bin/env python
#encoding:utf-8
'''''
__Author__:沂水寒城
功能:给定一个字符串,寻找最长重复子串
'''
from collections import Counter
def slice_window(one_str,w=1):
 '''''
 滑窗函数
 '''
 res_list=[]
 for i in range(0,len(one_str)-w+1):
 res_list.append(one_str[i:i+w])
 return res_list
def main_func(one_str):
 '''''
 主函数
 '''
 all_sub=[]
 for i in range(1,len(one_str)):
 all_sub+=slice_window(one_str,i)
 res_dict={}
 #print Counter(all_sub)
 threshold=Counter(all_sub).most_common(1)[0][1]
 slice_w=Counter(all_sub).most_common(1)[0][0]
 for one in all_sub:
 if one in res_dict:
 res_dict[one]+=1
 else:
 res_dict[one]=1
 sorted_list=sorted(res_dict.items(), key=lambda e:e[1], reverse=True)
 tmp_list=[one for one in sorted_list if one[1]>=threshold]
 tmp_list.sort(lambda x,y:cmp(len(x[0]),len(y[0])),reverse=True)
 #print tmp_list
 print tmp_list[0][0]
if __name__ == '__main__':
 print "脚本之家测试结果:"
 one_str='abcabcd'
 two_str='abcabcabd'
 three_str='bbbbbbb'
 main_func(one_str)
 main_func(two_str)
 main_func(three_str)


结果如下:


热心网友 时间:2022-04-18 07:09

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        lenS = len(s);
        maxLen = 0;
        left = right = 0;
        charDict = {};
        while right < lenS:
            if s[right] in charDict and left <= charDict[s[right]]: #出现重复的字符且这个字符在窗口中
                left = charDict[s[right]] + 1;                      #左窗口位置调整到这个重复字符的右端
            else:                                                   #没有重复字符出现
                maxLen = max(maxLen,right - left + 1);              #更新最长长度
            charDict[s[right]] = right;                             #更新字符位置
            right += 1;                                             #右窗口后移
        return maxLen;

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么电脑上的word界面变小为什么WORD里面的页面变的很小怎么设置回来... AHA拯救心脏救命术(Basic Life Support,BLS) 基础生命的基本顺序 机械制图第一视角与第三视角的区别 明日之后野外感染者据点都在什么地方 感染就聚集点位置分享 明日之后 明日之后哪些地图有强力感染者? 《明日之后》野外感染者据点一览 明日之后野外感染者据点去哪找 妙洁提醒你注意:保鲜膜有些不能加热 有些不能包肉 C盘里文件的修改日期是不是就代表那天我用过电脑,我是上午用的,可文件... 食品营养与检测专业 江南大学食品质量与安全专业培养目标是什么? 食品检测技术人员需要准备着什么要求!? 食品检测技术专业学的是什么 变形记如何报名 怎么样才能参加变形计 1. 结合当前金融危机和国内经济社会发展实际,谈谈大学新生应如何做好职业规划? 孩子很叛逆怎么参加变形记? 结合当前金融危机和国内经济社会发展实际,谈谈大学生应如何做好职业规划? 怎么参加湖南卫视的变形记? 社会学和金融学哪个更好就业 运用市场经济的知识,分析农村金融自治能取得良好经济效益与社会效益的原因. 参加变形记要怎么参加??? 怎么参加变形记 国家与社会应该如何为创业者提供更好的金融服务? 金融与好的社会的作者简介 金融与好的社会的内容简介 喋喋不休用具体情景表现出来,不能用喋喋不休这个词? 喋喋不休写出具体情景句子,30个字? 喋喋不休用具体的情景表现出来。 山东海化房地产有限公司介绍? 篮球背后运球怎么才能练好?? 篮球背后运球怎么才能练好?? 每一天可以稳定收入的赚钱项目有哪些呢? 有没有稳定的正规的网上赚钱的方法??求推荐 想要塑形做哪些运动比较好?塑形运动大全[想要瘦身人士必看] 手机上有没有靠谱点的赚钱方式,比较长久稳定的? 老表们 网上有什么赚钱稳定的门路 “瑞星软件部署系统”是什么?有什么用? 瑞星软件部署系统怎么卸载 什么是瑞星软件部署系统? 瑞星杀毒软件和瑞星软件部署系统为什么卸载不了?怎么卸载啊? 装的瑞星杀毒软件,其中有个“瑞星软件部署系统”这个程序能删除掉吗?谢谢 瑞星软件部署系统是什么东西,可不可以卸载掉,对电脑会不会有什么影响? 瑞星软件部署系统和瑞星杀毒软件有什么区别 瑞星软件部署系统怎么卸载不了?? 联通光纤宽带猫灯都正常,为什么连不上网? 瑞星软件部署系统如何卸载 家里光纤跟路由器一切正常就是连不上网是怎么回事 瑞星软件部署系统怎么卸载?