给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "abcabcbb"
,没有重复字符的最长子串是 "abc"
,那么长度就是3。
给定 "bbbbb"
,最长的子串就是 "b"
,长度是1。
给定 "pwwkew"
,最长子串是 "wke"
,长度是3。请注意答案必须是一个子串,"pwke"
是 子序列 而不是子串。
分析:dp问题
abcabcbb,length(s(i)) = length(s(i-1))+1(当s(i)与是s(i)中没有重复),length(s(i)) = p,p代表s(i)与s(i)中重复的最大的数列长度。
/** * @Author: dainan * @Date: 2018/7/18 09:53 * @Description: */ public class maxChar { public static int lengthOfLongestSubstring(String s) { if (s == null || s.length() == 0) { return 0; } if(s.length() == 1){ return 1; } /**记录以字母结尾的最大字符长度**/ int[] maxUnRepeatLength = new int[s.length()]; int max = 1; maxUnRepeatLength[0] = 1; for (int i = 1; i < s.length(); i++) { int length = 1; for (int j = i - 1; j >= i - maxUnRepeatLength[i - 1]; j--) { if (s.charAt(j) == s.charAt(i)) { break; } length++; } max = max > length ? max : length; maxUnRepeatLength[i] = length; } return max; } public static void main(String[] args) { String s = "bb"; System.out.println(lengthOfLongestSubstring(s)); } }