剑指 Offer II 016. 不含重复字符的最长子字符串
Posted 易小顺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer II 016. 不含重复字符的最长子字符串相关的知识,希望对你有一定的参考价值。
算法记录
LeetCode 题目:
给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。
说明
一、题目
给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。
二、分析
- 可以维护一个双指针来探测,一个指针指向当前序列的开始位置用于裁剪重复的元素,另一个指向最后一个位置添加新的元素,这样子序列的长度就是两个指针之间插值加1了。
- 往前添加元素时一旦遇见的字符已经在序列中出现过了,那就将裁剪指针挪到重复字符的下一个字符,新的子序列将没有重复元素,这就需要维护一个记录当前字符的工具,这里使用一个字符数组来代替,值就是字符出现的次数,大于一即可认为出现了字符重复。
class Solution {
public int lengthOfLongestSubstring(String s) {
if(s.length() < 2) return s.length();
int[] dict = new int[128];
int left = 0, right = 0, len = 1;
for(;right < s.length(); right++) {
dict[s.charAt(right)]++;
if(dict[s.charAt(right)] == 1) len = Math.max(len, right - left + 1);
while(dict[s.charAt(right)] > 1) {
dict[s.charAt(left)]--;
left++;
}
}
return len;
}
}
总结
没啥技巧,靠脑子想。
以上是关于剑指 Offer II 016. 不含重复字符的最长子字符串的主要内容,如果未能解决你的问题,请参考以下文章