使用队列来解决该问题会更简单一些,但我没有用。
代码利用了字符串数组和StringBuilder的内容
用StringBuilder来修改每个子串,利用String来进行判断
判断的思路是:
1、依次判断临时字符串stringBuilder 和 用例字符串的每个字符。
2、遇到相同的则 则将当前字符串stringBuilder 的内容存放到字符串数组中,同时清除该临时字符串的内容。并通过索引到达前边相同的字符的下一个开始,再次填充内容,直到遍历到最后。
3、比较字符串数组中的几个字符串的长度,并返回最长的字符串的长度。
public int lengthOfLongestSubstring(String s) {
String[] s1 = new String[s.length()];
StringBuilder stringBuilder = new StringBuilder();
int k = 0;
//1、依次判断
//2、遇到相同的则 通过索引到达前边相同的字符的下一个开始 创建一个新的字符串 遍历到最后
//3、比较创建的几个字符串的长度
int lengthSB = 0;
for (int i = 0; i < s. length(); i++) {
if (!stringBuilder.toString().contains(String.valueOf(s.charAt(i)))) { //与前边不同
stringBuilder.append(s.charAt(i));
if(i == s.length() - 1){
s1[k] = String.valueOf(stringBuilder); //"bbtablud"
k++;
}
}
else{
s1[k] = String.valueOf(stringBuilder);
k++;
lengthSB += stringBuilder.toString().indexOf(String.valueOf(s.charAt(i))) + 1;
i = lengthSB;
stringBuilder.delete(0,stringBuilder.length());
stringBuilder.append(s.charAt(i));
}
}
lengthSB = 0;
for (int i = 0; i < k; i++) {
if(lengthSB < s1[i].length()){
lengthSB = s1[i].length();
}
}
return lengthSB;
}
最后:不得不说的是,这种代码一看复杂度就很高。