无重复字符的最长子串
- 题目描述:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
通过双重循环
- 题目分析:该题目要求是要求无重复字符的最长子串,即有两个要求,第一是不能有重复字符,第二是所有字符都得是连续的。因此我需要通过二重循环,从第一个元素开始建立一个外循环,同时从第一个元素开始再建立一个内循环,外循环的元素与内循环的元素进行比较,如果二者一直不相等,则将该段序列长度保存下来,如果相等,则该段序列无效,接下来便从内循环的相等元素的后一个元素开始再重新开始一段序列。同时在比较过程中会将序列长度保存在n中,若有更大的数字就会对其进行更新。
- 代码展示:
class Solution {
public int lengthOfLongestSubstring(String s) {
char[] a = s.toCharArray();
int i,j;
int n=0;//存储最长子串长度
int m=1;//计算子串长度
int l=0;//内循环起始元素下标
for(i=0;i<a.length;i++){
for(j=l;j<=i;j++){
if(a[i] != a[j]){m++;}
else if(i != j){l=j+1;break;}
else {break;}
}
if(m>n) {n=m;m=1;}
else {m=1;}
}
return n;
}
}
- 运行评价:在该题中通过双重循环相对其他方法来讲效率更高,时间复杂度为O(n2)。同时纪念一下第一次程序双双突破90%