对于这题我的解法:最长长度不会超过出现不重复的字符数n,因此以这个数为开始,找子串长度为n。如果n没有找到,则n-=1,重新找。
需要判断子串是不重复的字符。
class Solution {
public int lengthOfLongestSubstring(String s) {
int size = getSize(s);
System.out.println();
for (int i = 0; i < size; i++) {
int maxLength = size - i;//最大长度
for (int j = 0; j < s.length(); j++) {
String substring=null;
if (j + maxLength - 1 < s.length()) {
substring = s.substring(j, j+maxLength);
}
if (getSize(substring) == maxLength) {
return maxLength;
}
}
}
return 0;
}
private int getSize(String s) {
if (s==null){
return 0;
}
char[] chars = s.toCharArray();
// 得到无重复字符数
HashSet<Character> hashSet = new HashSet<>();
for (int i = 0; i < chars.length; i++) {
hashSet.add(chars[i]);
}
int size = hashSet.size();
return size;
}
}
待后期优化