算法(JAVA):3力扣第3题双百解法
第3题: 无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
提示:
0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成
这题审题最重要的一点是字符串是由英文字母、数字、符合和空格组成, 假设符号全部是半角符号, 那么这些字符的编码就是0-130, 这样我们可以建立一个长度为130的int数组, 数组索引即为字符编码, 存储值即为字符最后一次出现索引。这样只要记录每次滑动门的起点,判断字符是否出现在起点之后, 如果是则重复, 计算当前和起点时间差值即可得到长度。
class Solution {
public int lengthOfLongestSubstring(String s) {
int []hash=new int [130];
int start=0,count=0;
for(int i=0;i<s.length();i++){
if(hash[s.charAt(i)]-1<start){
count=Math.max(i-start+1,count);
hash[s.charAt(i)]=i+1;
}else{
start=hash[s.charAt(i)];
hash[s.charAt(i)]=i+1;
}
}
return count;
}
}
发表回复