LeetCode:无重复字符的最长子串(Java)

278 阅读1分钟

一、无重复字符的最长子串

  给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

二、我的暴力解法

  我最容易想到的方法就是,与给定一个数字数组求最大值一样,采用max与每次字符串遍历(遍历举例:abcde-bcde-cde-de-e)得到的不重复子串的长度来修改max的值,直到遍历完成。

package cn.edu.neu.leetcode;

import java.util.*;

/**
 * @author 32098
 *
 * 无重复字符的最长子串
 * 给定一个字符串 s , 请你找出其中不含有重复字符的最长子串的长度。
 */
public class LongestSubstring {
    public static int lengthOfLongestSubstring(String s) {
        int max = 0;

        // flag
        boolean flag;

        Set<Character> characterSet = new HashSet<>();
        // 从第一个字符遍历,求不重复子串的最大长度
        for(int i=0; i<s.length(); i++){
            flag = true;
            int j = i;
            while(flag){
                // 如果添加失败则说明集合存在该字符,进入if语句
                if(!characterSet.add(s.charAt(j)) || j==s.length()-1){
                    flag = false;
                    max = Math.max(characterSet.size(), max);
                    characterSet.clear();
                }
                j++;
            }
        }
        return max;
    }

    public static void main(String[] args) {
        System.out.println(lengthOfLongestSubstring("abc"));
    }
}

image.png

  就,挺差的。