无重复字符的最长子串

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;
    }
}