题目

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

示例 1:

输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2:

输入: s = “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3:

输入: s = “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。 示例 4:

输入: s = “” 输出: 0
提示:

0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成

思考

首先我们考虑就是通过一个集合存放遍历的字符,第一次发现有重复的字符标记一下集合中存放重复字符的位置。赋值给临时变量temp。后面遍历的时候比较临时变量和当前重复字符的位置大小区最大值。可能文案不好理解 举个例子:
比如: abcabwert
第一次重复出现是a 位置是1 第二次出现重复是b 这时候temp 就应该是2 因为b 的位置大于第一次a 的位置。后面这个abwert 没有重复了 按照正常逻辑算长度就是 遍历的长度 i + 1 - temp 就是当前遍历目前最长无重复字符串长度。因为他是遍历目前 所以也得给他放到一个临时变量中index。也是每次遍历取最大值。根据这个思路可以得出如下第一种算法。
不管哪种算法思路和上面是如出一辙。比如使用第二种算法,没有使用集合存放元素它使用的是assic码 因为上面有一句提示 s 由英文字母、数字、符号和空格组成 可以得出他们所有字符的assic 0-127 所以可以使用一个int[] s = new int[128] 来存放每个字符 值为他们的下标+1 位置。
疑问:为啥要加+1
解答: 是因为我们相同的时候返回1 为了统一处理都加1 不用单独处理。比如:bbb 不使用下标+1 返回就是0 ,使用+1 就是1 。

算法

第一种

/*** 利用hashMap 存放字符 当存在的时候:最终得到最后一个相同字符的下标位置+1** @param s* @return*/public static int lengthOfLongestSubstring(String s) {int length = s.length();int temp = 0;int index = 0;Map<Character, Integer> characterIntegerMap = new HashMap<>(length);for (int i = 0; i < length; i++) {char c = s.charAt(i);if (characterIntegerMap.containsKey(c)) {// 最终得到相同字符的下标最大差值temp = Math.max(characterIntegerMap.get(c), temp);}characterIntegerMap.put(c, i + 1);// 最终得到最长无重复字符串长度: 存在符合要求的的字符串长度 和 最新遍历无重复长度 求最大值index = Math.max(index, i + 1 - temp);}return index;}

第二种

  /*** 使用char assic 和 int 映射 实现相同字符的下标替换: char的assic值 作为 数组的下标 , char 在字符串中下标+1 作为数组的对应的值** @param s* @return*/public static int lengthOfLongestSubstringV2(String s) {int[] arras = new int[128];int length = s.length();int index = 0;int temp = 0;for (int i = 0; i < length; i++) {// 最终得到最后一个相同字符的下标位置+1temp = Math.max(temp, arras[s.charAt(i)]);// 最终得到最长无重复字符串长度: 存在的字符串长度 和 最新遍历无重复长度 求最大值index = Math.max(index, i + 1 - temp);arras[s.charAt(i)] = i + 1;}return index;}

结果

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度相关推荐

  1. python练习题:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度

    题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 题目解析: 有一个字符串,长度不定, 要找出不重复字符串的长度,我们可以这么假设,先找到第一个下标,然后从后面拿到元素的下标对 ...

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

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

  3. java C++ 实现 leetcode 第三题 3. 无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

    一.C++实现 int lengthOfLongestSubstring(string s) {if (s.length() <= 1)return s.length();int res = 1 ...

  4. (java)给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

    给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. public class LengthOfLongestSubstring {public int lengthOfLonges ...

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

    目录 一.代码 二.代码分析 一.代码 public class Demo {public static void main(String[] args) {Scanner sc = new Scan ...

  6. python 找出其中不含有重复字符的最长子串的长度

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

  7. 【每日一练及解题思路V1】给定一个字符串,找出其中不含重复字符的最长子串的长度

    一.题目:给定一个字符串,找出其中不含重复字符的最长子串的长度: 二.举例: 比如"abcdefgh",不含重复字符的最长子串为eacdb,长度为8: 比如"abceac ...

  8. python重复字符串n次的函数_LeetCode_Python(3)_无重复字符的最长子串

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

  9. 获取字符串中的.前面的长度_算法连载之求解不含有重复字符的最长子串长度...

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

最新文章

  1. python3 socketserver_《Python核心编程(第3版)》——2.5 *SocketServer模块
  2. 硕士可以跟别的导师做实验吗_如何成为一名导师可以成为双刃剑
  3. vue底部跳转_详解Vue底部导航栏组件
  4. python天天向上的力量三天打鱼两天晒网_017 示例3-天天向上的力量-Go语言中文社区...
  5. 【教程分享】大数据视频教程
  6. 海康sdk java_java调用海康sdk案例
  7. Java 正则表达式的用法及常用方法
  8. 科来网络分析系统11.1(技术交流免费版)
  9. 用c语言编程点亮7个二极管,单片机c语言编程二极管_单片机c语言编程_单片机c语言编程led...
  10. VBA按行读取TXT文本文件
  11. afc2add是什么有什么用怎么安装_afc2add详解
  12. R 实战学生成绩描述分析
  13. CC2530 实现无线串口
  14. Go项目配置管理神器之viper使用详解
  15. java BigDecimal
  16. CWnd::WindowProc的理解
  17. 怎么将PDF图纸转换成CAD图纸
  18. python反爬与反反爬常用知识点
  19. 唱歌发声的技巧与方法
  20. 【手把手带你刷好题】—— 43.满足条件的两数之和(双指针、非力扣)

热门文章

  1. 日记 | STM32串口显示YL-69土壤湿度
  2. A. Banana 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛
  3. SimpleDateFormat日期转换之12小时和24小时制
  4. Vmware搭建hadoop集群(一)
  5. 新编计算机英语复习(东华理工专业外语)
  6. Textbox只留下边框线
  7. java 随机生成不重复的数字_生成8位随机不重复的数字编号的方法
  8. 小白用Python抓取豆瓣高评分喜剧电影
  9. PS唯美清新花朵调色
  10. m.444lu.co show.php,vml圆角矩形最简布局_javascript技巧