【题目链接】https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
【思想】
初始时,字符串 S 的无重复字符的最长子串在 ij 区间[0,0],探索子串在 mn 区间也是[0,0]
尝试向 mn 中逐一添加 S 中的字符
添加成功( mn 中本不包含该字符),则扩大mn,并判断扩大后的 mn 是否长于 ij ,若是则替代 ij
添加失败( mn 中已包含该字符),则更新 mn
【Java代码】
public int lengthOfLongestSubstring(String s) {
if (s.length() == 0) return 0;
char[] charArray = s.toCharArray();
int i = 0;//初始结果区间ij就是[0,0]
int j = 0;
int m = 0;//初始探索区间mn也是[0,0]
int n = 0;
for (int k = 1; k < charArray.length; k++) {//向mn中逐一添加字符
boolean inFlag = false;
for (int p = m; p <= n; p++) {//判断mn中是否有k,如果没有,那么mn变大并判断mn能否替代ij;如果有,则更新mn
if (charArray[p] == charArray[k]) {//mn中有k,更新mn
m = p + 1;
n = k;
inFlag = true;
break;
}
}
if (!inFlag) {//mn中没有k
n++;//扩大mn
if ((n - m) > (j - i)) {//判断mn能否替代ij
i = m;
j = n;
}
}
}
return j - i + 1;
}