一、无重复字符的最长子串
给定一个字符串 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"));
}
}
就,挺差的。