给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
public static void main(String[] args) {
int len = lengthOfLongestSubstring2("dafaf agdaxcacaa asdcasdsa faf a a dsadasdsadgfgdfgfl;knjgdmnmvcnihfdslkgndsfln");
System.out.println(len);
}
/**
* @author ouyang
* @date 2019/1/28
* @param s
* @return int
*/
public static int lengthOfLongestSubstring2(String s) {
//s的长度为 n
int n = s.length();
//定义一个set
Set<Character> set = new HashSet<>();
//长度为ans 字符串片段 头下标为i 尾部下标尾j
int ans = 0, i = 0, j = 0;
while (i < n && j < n) {
if (!set.contains(s.charAt(j))) {
//如果set中不包含s.charAt(j)元素 追加元素 j++
set.add(s.charAt(j++));
//和ans做对比 如果字符串片段更长 赋值
ans=Math.max(ans,j-i);
}
else{
//否则删除指定的 字符 然后i++;头下标前移一位
set.remove(s.charAt(i++));
}
}
return ans;
}
public static boolean allUnique(String s, int start, int end) {
//定义一个set集合
Set<Character> set = new HashSet<>();
//遍历 下标start后的字符
for (int i = start; i < end; i++) {
//返回指定索引的char值
Character ch = s.charAt(i);
//如果set包含指定元素则返回 true
if (set.contains(ch)) {
return false;
}
set.add(ch);
}
return true;
}