Leetcode 3--Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
解法1:从左往右扫描字符串,记录当前重复字串的起始位置为start,当遇到重复字符时,将start更新为重复字符的index加一,比较当前不重复字符串长度与max值,更新max值。
寻找重复字符的方式有两种,一种是用一个map记录每个字符上次出现的位置(可用hashmap或int[256]), 或者仅记录字符是否出现在start后,逐一更新start,直到当前字符不再重复。
<span style="font-size:14px;"> public class Solution {
public int lengthOfLongestSubstring(String s) {</span>
<span style="font-size:14px;"><span style="white-space:pre"> </span> if(s = null || s.length()== 0) return 0;
HashMap<Character, Integer> map = new HashMap<Character,Integer>();
int maxLen = 0;
int start = 0;
for (int i = 0; i< s.length(); i++) {
if (!map.containsKey(s.charAt(i)) || map.get(s.charAt(i)) < start) {
map.put(s.charAt(i),i);
}
else {
maxLen = Math.max(maxLen,i - start);
start = map.get(s.charAt(i)) + 1;
map.put(s.charAt(i),i);
}
}
maxLen = Math.max(maxLen, s.length() - start);
return maxLen;
}
}</span>