题目:
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "abcabcbb"
,没有重复字符的最长子串是 "abc"
,那么长度就是3。
给定 "bbbbb"
,最长的子串就是 "b"
,长度是1。
给定 "pwwkew"
,最长子串是 "wke"
,长度是3。请注意答案必须是一个子串,"pwke"
是 子序列 而不是子串
在提交了解答后看到用时最少的解法是这样的:
class Solution { public int lengthOfLongestSubstring(String s) { int max=0; int count=0; char[] c=s.toCharArray(); for(int i=0;i<c.length;i++){ for(int j=count;j<i;j++){ if(c[i]==c[j]){ count=j+1; break; } } max=Math.max(max,i-count+1); } return max; } }
/* 1.遍历从起点到当前位置的字符(终点字符) 1.1 如果有字符跟当前字符相同 1.1.1 记录该字符位置,循环结束 1.1.2 终点字符后移一位,将起点位置设为重复处的下一位,重新比较 1.2 如果没有字符跟当前字符相同 1.2.1 当前最大子串长度为max(max,i-count+1) 2. 实质 直接求两个相同字符间字符串的长度,取其最大值 */