每天一道算法题:无重复字符的最长子串
题目
给定一个字符串,找出不含有重复字符的 最长子串 的长度。
示例:
给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。
给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。
给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列 而不是子串。
方案1
思路:
字符对应的数字作为下标
初始化一个255的boolean作为所有可能出现的字符对应的存在可能性,不存在重复的均为false,存在重复的,则对应的下标置为true。
两个指针进行移动,前指针先不动,后指针移动并根据当前字符对应整数下标是否为false或者true进行判断。如果是false,则表示没有重复,则指针向后移动一位;如果为true,表示存在重复,则后指针停止移动,并计算当前字串长度,且将boolean数组重置,第一个指针向前移动一位,后指针指向当前前指针。
class Solution {public int lengthOfLongestSubstring(String s) {int len = 0 ;if (s==null || s.length()== 0 ){return 0;}if (s.length() == 1){return 1;}int firstPoint = 0;int nextPoint = 0;boolean[] exist=new boolean[255];while (nextPoint < s.length()&&firstPoint <s.length()){int currMax = 0;int index = s.charAt(nextPoint)-0;while (exist[index] == false&&nextPoint<s.length()){exist[s.charAt(nextPoint)-0] = true;nextPoint++;if (nextPoint < s.length()){index = s.charAt(nextPoint)-0;}}currMax = Math.max(currMax,nextPoint-firstPoint);firstPoint++;nextPoint=firstPoint;len = Math.max(len,currMax);for (int i = 0 ; i < 255 ; i++){exist[i] = false;}}return len;}
}
复制代码
方案2
思路:
以一个hashmap作为辅助,map的key存储的是字符,value存储的是该字符当前的位置,首先设置一个头指针,指向字符串开头,那么从开始遍历字符串,如果map当中不包含这个字符,那么用这个字符当前所在的位置减去头指针的位置,然后与最大长度做比较,选打的成为最大长度,然后把当前字符的以及位置放入map,以abba为例,头指针指向a,当前为a,那么长度为1,map。put(‘a’,0),当前为b,那么长度为2,map.put('b',1),如果说map中存在当前字符,那么把头指针指向,头指针当前的位置与map中存储该字符位置的下一个位置当中的较大者,成为新的头指针位置,比如当走到第二个b的时候,那么头指针原来是0,当前map中存放b的位置是1,那么头指针指向2,所以长度为1,比最大长度小不进行替换,最后将当前的字符及位置放入map,现在是map.put('b',2),然后走到了a,那么当前map中a的位置是0,那么它的下一个位置是1,与当前头指针位置2相比,小于当前头指针的位置,那么头指针不跟新,所以长度为2,与最大长度相等,所以不替换,最后求出最大长度为2.
public static int lengthOfLongestSubstring(String s) { Map<Character,Integer> map=new HashMap<Character,Integer>(); int maxLength=0; int now=0; for(int i=0;i<s.length();i++){ if(map.containsKey(s.charAt(i))){ now=Math.max(map.get(s.charAt(i))+1,now); if((i-now+1)>maxLength){ maxLength=i-now+1; } }else{ if((i-now+1)>maxLength){ maxLength=i-now+1; } } map.put(s.charAt(i), i); } return maxLength; }
复制代码
每天一道算法题:无重复字符的最长子串相关推荐
- 快手校招算法题 无重复字符的最长子串
时间限制:5秒 空间限制:32768K 给定一个字符串,请找出其中长度最长且不含有重复字符的子串,计算该子串长度. 输入描述: 输入类型为字符串,例如"abcde" 输出描述: 输 ...
- leetcode算法题--无重复字符的最长子串
题目地址: https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ https://leetc ...
- php无重复字符的最长子串,PHP算法之无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- 【每日一算法】无重复字符的最长子串
微信改版,加星标不迷路! 每日一算法 - 无重复字符的最长子串 思路答案 首先定义一个指针p指向该字符串的链头,然后通过p指针后的第i个字符是否和p指针后的第j个字符相同来取得最大长度.(也叫做完全遍 ...
- 力扣第三题 无重复字符的最长子串
有啥不懂的评论区可以问 ### 解题思路 双指针指向无重复字符的最长字串 而双指针构成的那部分可以看成一个滑动窗口 中间运用双for循环 外面for循环遍历整个字符串,内循环遍历整个滑动窗口 ...
- 算法三:无重复字符的最长子串
下面是我的算法:暴力算法,最简单的思路,循环所有的字符 class Solution {public int lengthOfLongestSubstring(String s) {int i, j; ...
- LeetCode刷题——无重复字符的最长子串
目录 一.题目描述 二.题解 三.源码 一.题目描述 二.题解 三.源码 class Solution(object):def lengthOfLongestSubstring(self, s):&q ...
- C# 算法题系列(一) 两数之和、无重复字符的最长子串
题目一 原题链接 https://leetcode-cn.com/problems/two-sum/ 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整 ...
- python经典算法题:无重复字符的最长子串
题目:无重复字符的最长子串. 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子 ...
- 最长不重复子串python_python经典算法题:无重复字符的最长子串
题目:无重复字符的最长子串. 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子 ...
最新文章
- 几种典型磁铁表面的磁感应强度的变化
- .net讀取指定節點的值
- Oracle11gR2在9x8hk..Windows18669144449 命名进入Oracle
- Django(part52)--项目部署
- 母版页(Master Pages)--轉載
- java运行字符串代码
- head first python(第三章)–学习笔记
- python的编译过程_Python docutils文档编译过程方法解析
- 计算机偏门术语,没听说过 WinXP偏门应用技巧四则
- eclipse设置格式化tab为4个空格和idea一样
- 研发做好了,产品不一定能卖掉;研发做不好,没东西可卖
- vray渲染里服务器信息,Vray使用手册——设置V-Ray渲染服务器
- 10、Lctech Pi(F1C200S)驱动电阻屏触摸芯片ns2009(ts2007),buildroot配置tslib(CherryPi,Mangopi,F1C100S)
- 【matlab 图像处理】双边滤波高斯滤波
- 【计算机软件基础】如何理解鲁棒性Robust?
- win10 计算机 搜索文件,如何在win10搜索指定文件_教你在win10搜索指定文件的方法...
- 【行业分析】打破食品行业供应链薄弱环节,建设数字化韧性供应链
- windows打开虚拟键盘命令
- SpringCloud Admin监控界面解释
- 表格里面如何根据身份证号提取出生日期
热门文章
- 移动端overflow-x去掉滑动条
- 北京理工大学计算机基础实验,北京理工大学2020计算机基础考研真题
- java spring 连接池配置_Spring中常用的连接池配置
- fatal error: hb.h: 没有那个文件或目录
- BAT中取得一个命令的执行结果
- 代码管理学:遇到技术难题,要知道找谁
- net.java.html.boot.BrowserBuilder
- Child module pom.xml of pom.xml does not exist @
- 世界首席WP(文字处理)布局绘制砖家横空出世
- 软件基本功:开发测试中的穷举归纳法