题目
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.
分析
用一个256大小的布尔数组记录子串中字符是否出现,用首、尾两个指针(即数组索引)进行遍历,首指针指向子串首部,尾指针不断后移,当遇到子串中已有的重复字符,再移动首指针直至去掉重复字符。
解答
public class LongestSubString {
public int lengthOfLongestSubstring(String s) {
boolean[] flag = new boolean[256]; // default value: 0 | false
int ret = 0;
int count = 0;
int head = 0;
for (int i = 0; i < s.length(); ++i) {
char tailChar = s.charAt(i);
if (!flag[tailChar]) {
flag[tailChar] = true;
++count;
} else {
ret = Math.max(ret, count);
char headChar = s.charAt(head);
while (headChar != tailChar) {
flag[headChar] = false;
headChar = s.charAt(++head);
--count;
}
++head;
}
}
return Math.max(ret, count);
}
}