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.
问题:
已知一个字符串,求用该字符串的无重复字符的最长子串的长度。
例如:
s = "abcabcbb" -> "abc",3
s = "bbbbb" -> "b",1
s = "pwwkew" -> "wke", 3
思路:
设置一个记录字符数量的hashmap,char_map。
设置两个指针(指针begin与i)指向字符串的第一个字符。
如果某字符出现,则char_map[字符]++;
若某字符出现了两次,即char_map[字符] >1,那么char_map[s.charAt(begin)]至char_map[s.charAt(i)]值均减一,直到没有重复字符。
修改完begin后,将tmp_len修改为i-begin+1。
class Solution {
public int lengthOfLongestSubstring(String s) {
//用字符建立hash存储此时当前字符出现数量,线性滑动窗口解
int begin = 0;
int result = 0;
int tmp_len= 0;
String word = "";
int[] char_map = new int[128];
for(int i=0;i<s.length();i++)
{
char_map[s.charAt(i)]++;
if(char_map[s.charAt(i)] == 1){ //如果该字符第一次出现
tmp_len++;
result = Math.max(result, tmp_len);
}
else{
while(begin < i && char_map[s.charAt(i)] > 1)
{
char_map[s.charAt(begin)]--;
begin++;
}
}
tmp_len = i-begin+1;
}
return result;
}
}
博主学习笔记,转载请注明出处,谢谢~