题目:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
上图已经能够很直观的展示了该如何去遍历了:
- 遍历时记录每一个字符最后出现的位置。
- 取当前字符最后出现的位置和Last的最大值,赋值给Last
- 比较Last Max和i - Last的大小,如果i - Last更大则说明找到了新的最大子串,把i - Last赋值给Last Max。
具体实现代码如下:
public int solution(String s) {
int [] temp = new int[256];
int last = 0, result = 0;
for(int i = 0; i < s.length(); i++){
last = Math.max(last, temp[s.charAt(i)]);
temp[s.charAt(i)] = i + 1;
result =Math.max(result, i - last + 1);
}
return result;
}
更多LeetCode文章:
https://github.com/ybjx/Leetcode/
扫码关注:
头条号: 微信公众号: