LeetCode#3-找无重复的最长子串

import java.util.HashMap;

/*
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。


      解题思路:
          维护一个hashmap<char,index>

 */
public class p3 {
    public static int lengthOfLongestSubstring(String s) {
        int maxLen=0,tmplen=0,left=0;
        int len=s.length();
        if(len==0)return 0;
        if(len==1)return 1;
        HashMap<Character,Integer> map=new HashMap<>();
        char arr[]=s.toCharArray();
        for(int i=0;i<arr.length;i++){
            if(!map.containsKey(arr[i])){//若不存在该键值
                map.put(arr[i],i);
                tmplen++;
                maxLen=Math.max(tmplen,maxLen);

            }
            else{//遍历到已经有了
                int index=map.get(arr[i]);
                left=Math.max(left,index+1);
                tmplen=i-left+1;
                maxLen=Math.max(tmplen,maxLen);
                map.put(arr[i],i);
            }
        }
        return  maxLen;

    }

    public static void main(String[] args) {
        System.out.println(lengthOfLongestSubstring("pwwkew"));
    }

}

运行结果:

posted @ 2020-07-02 23:03  菜鸡要加油  阅读(134)  评论(0编辑  收藏  举报