算法记录
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;
}
}
总结
没啥技巧,靠脑子想。
|