-
题目描述
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
-
示例
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其
长度为 3。
-
思路以及代码
- 思路:
1.1、创建一个set集合,使用charAt();遍历字符串;
1.2、如果set中没有这个字符,将这个字符设置进set中,记录此时不重复字符串的长度;
1.3、如果set有这个字符,从set中移除这个字符;
1.4、最后返回子串的长度;
2.代码:
import java.util.HashSet;
import java.util.Set;
/**
* @author 橙橙橙。
* 1、采用滑动窗口的方法,设置两个指针;
* 2、以及一个随时记录最大长度的变量;
* 3、定义一个Set变量
* 4、当遇见非重复的字符时,加入set中,同时增加最大子串的长度;
* 5、当遇到重复的子串,对set中的元素进行截断;
* 6、截断的同时,对最大子串的数目进行监控;
* 7、返回最大子串长度
*/
public class findMaxSubString {
public static void main(String[] args) {
String s = "duwegfhgsggshsahuabhsdhgdqdb";
System.out.println(getMaxSubstringValue(s));
}
public static int getMaxSubstringValue(String s) {
if(s.length() <= 1) {
return 1;
}
int sumCount = 0;
int i = 0;
int j = 0;
int len = s.length();
Set<Character> set = new HashSet<>();
while(i < len && j < len) {
if(!set.contains(s.charAt(j))) { //如果set中没有这个字符串
set.add(s.charAt(j++)); //将这个字符串加进set中;
sumCount = Math.max(sumCount, j - i); //获取当前不重复最长子串的长度
} else {
set.remove(s.charAt(i++)); //如果当前字符出现在set中,则移除set中的一个元素
}
}
return sumCount;
}
}
结果:
7
描述不是非常清楚?请指教~