已解决
LeetCode--3.无重复字符的最长子串
来自网友在路上 163863提问 提问时间:2023-10-29 03:39:31阅读次数: 63
最佳答案 问答题库638位专家为你答疑解惑
1 题目描述
给定一个字符串 s
, 请你找出其中不含有重复字符的 最长子串 的长度
示例 1:
**输入:** s = "abcabcbb"
**输出:** 3
**解释:** 因为无重复字符的最长子串是 `"abc"`, 所以其长度为 3
示例 2:
**输入:** s = "bbbbb"
**输出:** 1
**解释:** 因为无重复字符的最长子串是 `"b"`, 所以其长度为 1
示例 3:
**输入:** s = "pwwkew"
**输出:** 3
**解释:** 因为无重复字符的最长子串是 `"wke"`, 所以其长度为 3请注意, 你的答案必须是 **子串** 的长度, `"pwke"` 是一个_子序列, _不是子串
提示:
0 <= s.length <= 5 * 104
s
由英文字母、数字、符号和空格组成
2 解题思路
解题思路
- 滑动窗口 + map, 对字符遍历一次就能找到最长子字符串, 时间复杂度 O(n)
2.1 代码实现
public int lengthOfLongestSubstring(String s) { if (null == s || s.isEmpty()) { return 0; } // key为字符串中的字符,value为字符下标 HashMap<Character, Integer> map = new HashMap<>(); // i为左指针,j为右指针 int i = -1; // res为最长子串的长度 int res = 0; for(int j = 0; j < s.length(); j++) { // 如果map中包含当前字符,则将左指针移动到当前字符的下标 if (map.containsKey(s.charAt(j))) { i = Math.max(i, map.get(s.charAt(j))); } // 将当前字符放入map中 map.put(s.charAt(j), j); // 计算最长子串的长度 res = Math.max(res, j - i); } return res;
}
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"LeetCode--3.无重复字符的最长子串":http://eshow365.cn/6-27390-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 跟我学C++中级篇——右值引用和万能引用
- 下一篇: 程序化交易(二)level2行情数据源接入