给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
package my; import java.util.HashSet; import java.util.Set; public class LongestSubString { int lengthOfLongestSubstring(String s){ //定义一个哈希集合set,初始化结果 max 为0 Set<Character> set = new HashSet<>(); int max = 0 ; //用快慢指针 i,j 扫描一笔字符串,如果快指针所指向的字符已经出现在哈希集合里,不断地尝试将慢指针所指向的字符从哈希集合中删去 for(int i =0,j=0; j< s.length();j++){ while(set.contains(s.charAt(j))){ set.remove(s.charAt(i)); i++; } //当快指针的字符加入到哈希集合后,更新一下结果max set.add(s.charAt(j)); max = Math.max(max,set.size()); } return max; } public static void main(String[] args){ String str ="qwetwr"; LongestSubString s = new LongestSubString(); int n =s.lengthOfLongestSubstring(str); System.out.println(n); } }