题目

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

示例:

  • 给定 "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;  }
复制代码

每天一道算法题:无重复字符的最长子串相关推荐

  1. 快手校招算法题 无重复字符的最长子串

    时间限制:5秒 空间限制:32768K 给定一个字符串,请找出其中长度最长且不含有重复字符的子串,计算该子串长度. 输入描述: 输入类型为字符串,例如"abcde" 输出描述: 输 ...

  2. leetcode算法题--无重复字符的最长子串

    题目地址: https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ https://leetc ...

  3. php无重复字符的最长子串,PHP算法之无重复字符的最长子串

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...

  4. 【每日一算法】无重复字符的最长子串

    微信改版,加星标不迷路! 每日一算法 - 无重复字符的最长子串 思路答案 首先定义一个指针p指向该字符串的链头,然后通过p指针后的第i个字符是否和p指针后的第j个字符相同来取得最大长度.(也叫做完全遍 ...

  5. 力扣第三题 无重复字符的最长子串

    有啥不懂的评论区可以问 ### 解题思路 双指针指向无重复字符的最长字串   而双指针构成的那部分可以看成一个滑动窗口  中间运用双for循环 外面for循环遍历整个字符串,内循环遍历整个滑动窗口   ...

  6. 算法三:无重复字符的最长子串

    下面是我的算法:暴力算法,最简单的思路,循环所有的字符 class Solution {public int lengthOfLongestSubstring(String s) {int i, j; ...

  7. LeetCode刷题——无重复字符的最长子串

    目录 一.题目描述 二.题解 三.源码 一.题目描述 二.题解 三.源码 class Solution(object):def lengthOfLongestSubstring(self, s):&q ...

  8. C# 算法题系列(一) 两数之和、无重复字符的最长子串

    题目一 原题链接 https://leetcode-cn.com/problems/two-sum/ 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整 ...

  9. python经典算法题:无重复字符的最长子串

    题目:无重复字符的最长子串. 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子 ...

  10. 最长不重复子串python_python经典算法题:无重复字符的最长子串

    题目:无重复字符的最长子串. 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子 ...

最新文章

  1. 几种典型磁铁表面的磁感应强度的变化
  2. .net讀取指定節點的值
  3. Oracle11gR2在9x8hk..Windows18669144449 命名进入Oracle
  4. Django(part52)--项目部署
  5. 母版页(Master Pages)--轉載
  6. java运行字符串代码
  7. head first python(第三章)–学习笔记
  8. python的编译过程_Python docutils文档编译过程方法解析
  9. 计算机偏门术语,没听说过 WinXP偏门应用技巧四则
  10. eclipse设置格式化tab为4个空格和idea一样
  11. 研发做好了,产品不一定能卖掉;研发做不好,没东西可卖
  12. vray渲染里服务器信息,Vray使用手册——设置V-Ray渲染服务器
  13. 10、Lctech Pi(F1C200S)驱动电阻屏触摸芯片ns2009(ts2007),buildroot配置tslib(CherryPi,Mangopi,F1C100S)
  14. 【matlab 图像处理】双边滤波高斯滤波
  15. 【计算机软件基础】如何理解鲁棒性Robust?
  16. win10 计算机 搜索文件,如何在win10搜索指定文件_教你在win10搜索指定文件的方法...
  17. 【行业分析】打破食品行业供应链薄弱环节,建设数字化韧性供应链
  18. windows打开虚拟键盘命令
  19. SpringCloud Admin监控界面解释
  20. 表格里面如何根据身份证号提取出生日期

热门文章

  1. 移动端overflow-x去掉滑动条
  2. 北京理工大学计算机基础实验,北京理工大学2020计算机基础考研真题
  3. java spring 连接池配置_Spring中常用的连接池配置
  4. fatal error: hb.h: 没有那个文件或目录
  5. BAT中取得一个命令的执行结果
  6. 代码管理学:遇到技术难题,要知道找谁
  7. net.java.html.boot.BrowserBuilder
  8. Child module pom.xml of pom.xml does not exist @
  9. 世界首席WP(文字处理)布局绘制砖家横空出世
  10. 软件基本功:开发测试中的穷举归纳法