给定一个字符串,找出不含有重复字符的最长子串。
示例:
给定 “abcabcbb” ,没有重复字符的最长子串是 “abc” 。
给定 “bbbbb” ,最长的子串就是 “b” 。
给定 “pwwkew” ,最长子串是 “wke”。
通过两个指针来遍历字符串,一个指针为最长子串的起点i,另一个为最长子串的终点j
用一个数组来记录这个字符是否重复,1表示存在,0表示不存在。
先让j开始遍历,遍历一个就将数组的j字符存为1
如果这个字符已经存在,比较长度,让i开始遍历,位置为当前j字符的下一个字符
public class 最长不重复子串 {
static String lengthOfLongestSubstring(String s) {
int i = 0;
int j = 0;
int n = s.length();
char[] l = s.toCharArray();
int[] exit = new int[256];
int maxlenth = 0;
int low = 0;
int high = 0;
while (j < n){
if(exit[l[j]] == 1){
if(maxlenth < j - i){
maxlenth = j - i;
low = i;
high = j;
}
while(l[i] != l[j]){
i++;
}
i++;j++;
}
else {
exit[l[j]] = 1;
j++;
}
}
if(maxlenth < n - i){
low = i;
high = n;
}
String result = s.substring(low,high);
return result;
}
public static void main(String[] args) {
String a = lengthOfLongestSubstring("pwwkew");
System.out.printf(a);
}
}