Contents
  1. 1. 题目:
    1. 1.1. 思路:

题目:

求一个字符串中最长的不含重复字符的子串。(注意:子串是连续的,子序列不是连续的)

思路:

记录当前字符串的最近一次出现的位置,然后更新符合题目的最长的子串长度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class LongestSubstringWithoutRepeatingCharacters {
public int lengthOfLongestSubstring(String s) {
int res = 0, left = 0;
int prev[] = new int[300]; //用来记录字符最近一次出现的位置

for (int i = 0; i < 300; ++i) //初始化
prev[i] = -1;

for (int i = 0; i < s.length(); ++i) {
if (prev[s.charAt(i)] >= left)
left = prev[s.charAt(i)] + 1; //如果最近一次出现在子串里,则更新左边界
prev[s.charAt(i)] = i; //更新最近一次出现的位置
if (res < i - left + 1) //更新结果
res = i - left + 1;
}
return res;
}
}
Contents
  1. 1. 题目:
    1. 1.1. 思路: