1.无重复字符的最长字串
...大约 1 分钟
1.无重复字符的最长字串
题目
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
输入:"abc"
输出:3
输入:"ababc"
输出:3
思路
本题有两个关键点,不含重复字符和最长子串。
看到最长子串,可以想到滑动窗口,比如遍历"ababc"字符串,第一次碰到重复的字符a时,就计算这个字符下标之后的长度即"abc",就像一个滑动的窗口,直到遇到再次重复的时候。
字符串一共有128个ASCII码,可以声明一个数组,记录当前字符出现的上一次下标,如果没有出现过,默认为-1。
并且start记录每个不重复字符串的初始位置,记录每个字符出现的下标,如果下次访问发现不为-1,说明出现过,start更新为这个下标的下一个。
public int findLongest(String s){
int[] last = new int[128];
Arrays.fill(last,-1);
int start = 0;
int res = 0;
for(int i = 0;i < s.length();i++){
int index = s.charAt(i);
start = Math.max(start,last[index] + 1);
res = Math.max(res,i-start+1);
last[index] = i;
}
return res;
}
Powered by Waline v2.15.8