最长不重复字符串
Input: "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
Input: "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.
思路:
(如果在每一位都寻找最大不重复字符串,会有很多重复计算。)
- 设最大不重复的头结点是i,尾结点是j。
- 每次把尾结点向后移一位,然后判断 j+1 位和之前的 i到j 位有没有相等的。
如果有,找到相等的位置k,i更新为此位置的下一位,k+1。继续循环直至j到达末尾。
s.t.:
- 使用数组来进行操作
- 数组注意判断是否越界
- 注意判断只有字符串只有一位
代码:
package Code.src.LeetCode;
import java.util.Scanner;
public class Medium_LongestSubstring {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
Medium_LongestSubstring ml = new Medium_LongestSubstring();
int a = ml.lengthOfLongestSubstring(s);
System.out.println(a);
}
public int lengthOfLongestSubstring(String s){
int i = 0, j = 0, count = 0, max = 0;
int length = s.length();
// System.out.println(length);
char[] array = s.toCharArray();
for (;j+1<length;j++){
while (j+1<length && judge(array, i, j+1) == -1){
j++;
// System.out.println(j);
}
count = j+1-i;
// System.out.println("count="+count+" ,j="+j);
if (count > max)
max = count;
if (j+1 < length)
i = judge(array, i, j+1)+1;
}
if (length == 1)
return 1;
return max;
}
public int judge(char[] array, int i, int j){
int flage = -1;
for (int k=i;k<j;k++){
if (array[k] == array[j])
flage = k;
}
return flage;
}
}