给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 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 由英文字母、数字、符号和空格组成
题意:找出其中不含有重复字符的 最长子串 的长度
思路:滑动窗口
正确代码:
class Solution {
public int lengthOfLongestSubstring(String s) {
HashMap<Character,Integer> map = new HashMap<Character, Integer>();
int left=0;
int max=0;
for (int i = 0; i < s.length(); i++) {
if(map.containsKey(s.charAt(i))){
left=Math.max(left,map.get(s.charAt(i))+1);
}
map.put(s.charAt(i),i);
max=Math.max(max,i-left+1);
}
return max;
}
}
完整代码(含测试代码):
package com.Keafmd.February.day11;
import java.util.HashMap;
import java.util.Map;
/**
* Keafmd
*
* @ClassName: LongestSubstringWithoutRepeatingCharacters
* @Description: 无重复字符的最长子串 https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
* @author: 牛哄哄的柯南
* @Date: 2021-03-11 8:23
* @Blog: https://keafmd.blog.csdn.net/
*/
public class LongestSubstringWithoutRepeatingCharacters {
public static void main(String[] args) {
String s1= "pwwkew";
Solution0311 solution0311 = new Solution0311();
int result = solution0311.lengthOfLongestSubstring(s1);
System.out.println(result);
}
}
class Solution0311 {
public int lengthOfLongestSubstring(String s) {
HashMap<Character,Integer> map = new HashMap<Character, Integer>();
int left=0;
int max=0;
for (int i = 0; i < s.length(); i++) {
if(map.containsKey(s.charAt(i))){
left=Math.max(left,map.get(s.charAt(i))+1);
}
map.put(s.charAt(i),i);
max=Math.max(max,i-left+1);
}
return max;
}
}
输出结果:
3
Process finished with exit code 0
看完如果对你有帮助,感谢点赞支持!
如果你是电脑端,看到右下角的 “一键三连” 了吗,没错点它[哈哈]
加油!
共同努力!
Keafmd