力扣第3题-- 无重复字符的最长字串

在这里插入图片描述
对于这题我的解法:最长长度不会超过出现不重复的字符数n,因此以这个数为开始,找子串长度为n。如果n没有找到,则n-=1,重新找。
需要判断子串是不重复的字符。

class Solution {
    
    
    public int lengthOfLongestSubstring(String s) {
    
    
        int size = getSize(s);
        System.out.println();

        for (int i = 0; i < size; i++) {
    
    
            int maxLength = size - i;//最大长度
            for (int j = 0; j < s.length(); j++) {
    
    
                String substring=null;
                if (j + maxLength - 1 < s.length()) {
    
    
                    substring = s.substring(j, j+maxLength);
                }
                if (getSize(substring) == maxLength) {
    
    
                    return maxLength;
                }
            }
        }
        return 0;
    }
     

    private int getSize(String s) {
    
    
        if (s==null){
    
    
            return 0;
        }
        char[] chars = s.toCharArray();
        // 得到无重复字符数
        HashSet<Character> hashSet = new HashSet<>();
        for (int i = 0; i < chars.length; i++) {
    
    
            hashSet.add(chars[i]);
        }
        int size = hashSet.size();
        return size;
    }
}

在这里插入图片描述
待后期优化

猜你喜欢

转载自blog.csdn.net/qq_41813208/article/details/109302929