输入一个字符串,输出其中最长的不重复子串的长度
输入
asdfasd
输出
4
import java.util.*;
public class 求字符串的最长不重复子串的长度 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String s="";
s=in.nextLine();
char[] c=new char[256];
int[] charMap=new int[256]; //记录重复字母的下标
c=s.toCharArray();
Arrays.fill(charMap,-1); //初始化为-1,表示没有找到重复的字母
int max=0;
int left=0; //left用来记录出现重复字母右边的那一个字母位置
for(int i=0;i<s.length();i++) {
//找到了重复的字母,记录位置
if(charMap[c[i]]>=left) {
left=charMap[c[i]]+1;
}
//计算出此时不重复子串的长度
int tmp=i-left+1;
if(tmp>max)
max=tmp;
//改变记录的位置
charMap[c[i]]=i;
}
System.out.println(max);
}
}