1. 题目
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 subsequenceand not a substring.
2. 关键算法
双指针
3. 代码实现
import java.util.HashMap;
/**
* @author: UniqueZ_
* @file: leetcode - length of longest substring without repeating characters
* @date: 2017-07-28
*/
public class LongestSubstring {
public int lengthOfLongestSubstring(String s) {
int begin = 1, end = 0;
int strLength = s.length();
HashMap<Integer, String> result = new HashMap<>();
int returnVal = 1;
// 字符串小于等于1
if (strLength <= 1) {
result.put(strLength, s);
return strLength;
}
while (begin < strLength) {
System.out.println(begin);
String currentStr = s.substring(end, begin);
String currentChar = s.substring(begin, begin+1);
// 当前begin对应的字符, 出现在当前begin - end之间的字符串
if (currentStr.contains(currentChar)) {
result.put(begin - end, currentStr);
end++;
continue;
}
begin++;
// begin达到字符串结尾时, 把当前字符串送进哈希表
if (begin == strLength) {
result.put(begin - end, s.substring(end, begin));
}
}
// 如果哈希表为空, 将整个字符串放进哈希表
if (result.isEmpty()) {
result.put(strLength, s);
}
// 获取最大长度
for (Integer key: result.keySet()) {
if (returnVal < key) {
returnVal = key;
}
}
return returnVal;
}
public static void main(String[] args) {
String s = "abcabcbb";
LongestSubstring obj = new LongestSubstring();
obj.lengthOfLongestSubstring(s);
}
}