算法(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;
    }
}

发表回复

您的电子邮箱地址不会被公开。