题解 | #最长不含重复字符的子字符串#

最长不含重复字符的子字符串

http://www.nowcoder.com/practice/48d2ff79b8564c40a50fa79f9d5fa9c7

import java.util.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return int整型
     */
    public int lengthOfLongestSubstring (String s) {
        // write code here
        if(s.length() <= 1){return s.length();}
        int[] len = new int[s.length()];  //记录当前字符串长度
        HashMap<Character, Integer> map = new HashMap<Character, Integer>();  //记录字符和索引
        int maxlength = 1;  //字符串最大长度
        //边界条件
        len[0] = 1; 
        map.put(s.charAt(0),0);
        
        for(int i = 1; i < s.length(); i++){
            if(!map.containsKey(s.charAt(i))){
                len[i] = len[i - 1] + 1;
            }
            else {
                int theBeforeIndex = map.get(s.charAt(i));
                int tmpCount = i - theBeforeIndex;
                len[i] = Math.min(tmpCount, len[i - 1] + 1);
            }
            map.put(s.charAt(i), i);
            maxlength = Math.max(maxlength,len[i]);
        }
        
        return maxlength;
    }
}
全部评论

相关推荐

斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
joe2333:怀念以前大家拿华为当保底的日子
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务