题:给定一个字符串,找到最长子字符串的长度而不重复字符。
例1:
输入:“abcabcbb”
输出:3
说明:答案是"abc",长度为3。
一开始看到题目很迷,很久没想出来,然后网上看了一下别人的思路,然后自己整理一下就过了。
题解:
定义一个int数组g 为了存字符的下标,给数组初始化为-1;(因为字符就那么几个对吧 我完全可以用数组来存,也可以用hashmap)
定义一个三个变量 left,len,max
遍历此字符串
判断该字符是否之前出现过,没有出现过就直接len++对吧,如果出现过,还得看他之前出现的位置,如果在left之前那也可以len++,反之 我们就得将现有的len和max比较了,我们的max一直存的都是最大值,所以每次出现重复字符的时候,len都会改变,所有改变的时候我们就可以进行比较,然后left 赋值成重复字符串的下表,然后len也要重新改变,哎直接丢代码吧
int[] g = new int[128];
for(int i=0;i<g.length;i++)
{
g[i]=-1;
}
int left = 0;
int len = 0;
int max = 0;
char ch;
for (int i = 0; i < s.length(); i++) {
ch=s.charAt(i);
if(g[ch]==-1 || g[ch]<left)
{
len++;
}else{
if(len>max)
max = len;
left = g[ch];
len = i-left;
}
g[ch]=i;
}
if(len>max)
max = len;
return max;