给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其
长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"
,所以其长度为 1。
解题思路:
通过i不断移动字符串中的字符,进行对比,mid代表位于i位置的字符第一次出现的次数,如果mid<i,说明字符重复,i-mid则为不重复字符的长度,length代表该阶段不重复字段的长度,result代表最后阶段不重复字段长度,每找到一位重复的字符,mid向前移一位,重新定位,i继续向后移动遍历字符串,知道result输出。result >= s.length() - mid -1表示剩余字符串长度小于不重复字段长度时结束遍历,返回result。
Java版代码如下:
class Solution {
public int lengthOfLongestSubstring(String s) {
int i = 0;
int length = 0;
int result = 0;
int flag = 0;
while (i < s.length()) {
int mid = s.indexOf(s.charAt(i),flag);
if (mid < i) {
if (result < length) {
result = length;
}
if (result >= s.length() - mid -1) {
return result;
}
length = i - mid -1;
flag = mid + 1;
}
length++;
i++;
}
return length;
}
}