问题描述:
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "abcabcbb"
,没有重复字符的最长子串是 "abc"
,那么长度就是3。
给定 "bbbbb"
,最长的子串就是 "b"
,长度是1。
给定 "pwwkew"
,最长子串是 "wke"
,长度是3。
解题思路:
使用集合set存储字符串s中第 i 到第 j-1 个不重复的字符,判断s中的第 j 个字符是否已经存在set中,若无添加至set
否则,设第 j 个字符与set中的第k个字符相同,则删除set中 第 i 到 第k 的所有字符, 再将第j个字符添加至set中。
如字符串s="abcdbcdd",set中已经存在字符:a、b、c、d,这时s中的第4个字符b与set中的第1个字符相同,则删去set中第0至第1的字符。并将第4个字符b加入set中。
实现代码:
public static int length(String s) { int max = 0; int i=0, j=0; Set<Character> set = new HashSet<>(s.length()); while (i < s.length()) { if (set.contains(s.charAt(i))) { set.remove(s.charAt(j++)); } else { set.add(s.charAt(i++)); max = Math.max(max, set.size()); } } return max; }
mark