题目描述
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.
- 思路
求最长不重复子串长度。
法一:记录最左不重复边界
法二:一个一个模拟,当遇到重复时计算最长长度(注意最后一位),然后每次循环起始点到最后的点长度不小于当前记录的最长长度
import java.util.*;
public class Solution {
public int lengthOfLongestSubstring(String s) {
if(s == null || s.length() == 0)
return 0;
int maxLen = 1;
int left = 0;
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
for(int i=0; i<s.length(); i++){
char ch = s.charAt(i);
left = Math.max(left, map.containsKey(ch) ? map.get(ch)+1 : 0);
maxLen = Math.max(maxLen, i-left+1);
map.put(ch, i);
}
return maxLen;
}
}
public class Solution {
public int lengthOfLongestSubstring(String s) {
if(s == null || s.length() == 0)
return 0;
int maxLen = 1;
char[] arr = s.toCharArray();
for(int i=0; i<arr.length-maxLen; i++){
int cnt = 1;
boolean[] f = new boolean[30];
f[arr[i]-'a'] = true;
for(int j=i+1; j<arr.length; j++){
if(f[arr[j]-'a'] || j == arr.length-1){
if(j == arr.length-1 && !f[arr[arr.length-1]-'a'])
cnt ++;
maxLen = Math.max(maxLen, cnt);
break;
}else{
f[arr[j]-'a'] = true;
cnt ++;
}
}
}
return maxLen;
}
}