题目描述
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
假设字符串中只包含从’a’到’z’的字符。
输入:“abcabc”
输出:3
输入
一个字符串
输出
最长不含重复字符的子字符串的长度
样例输入
abcabc
样例输出
3
代码(Java版)(滑动窗口优化)
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
String str=cin.next();
int[] index=new int[256];
Arrays.fill(index,-1);
int left=0,right=0;
int Max=0;
while(left<str.length()&&right<str.length()){
if(index[(int)str.charAt(right)]==-1){
index[(int)str.charAt(right)]=right;
}else{
if(left<=index[(int)str.charAt(right)]){
left=index[(int)str.charAt(right)]+1;
}
index[(int)str.charAt(right)]=right;
}
++right;
Max=Math.max(Max,right-left);
}
System.out.println(Max);
}
}
index[(int)str.charAt(i)]=j表示字符str.charAt(i)距离字符串下标i左边最近的字符的下标为j
举例:
String str=“abbcabbefa”;
当i=5时,str.charAt(i)=‘b’,此时令index[(int)str.charAt(i)]=3