QUESTION:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2:
输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3:
输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,”pwke” 是一个子序列,不是子串。
EXPLANATION:
题目意思很清楚,题意没说s只包含字母,所以我一开始直接用int[26]来指代的做法一下就越界了。只能换其他方法。
那么就可以这样:
1.对数组进行遍历标记为i,用一个数来表示之前的start
2.查找从start到当前遍历的数,是否有重复的
3.有重复的话,那么就需要计算i-start的长度
4.遍历到结束,获取到最大的长度
5.最后别忘记了,还有最后一次也就是start到末尾的长度
SOLUTION:
class Solution {
public int lengthOfLongestSubstring(String s) {
char[] chars = s.toCharArray();
int pre = 0,result = 0;
for(int i = 0;i<chars.length;i++){
for(int j = pre;j<i;j++){
if(chars[j]==chars[i]){
result = Math.max(i-pre,result);
pre = j+1;
}
}
}
result = Math.max(chars.length-pre,result);
return result;
}
}