zoukankan      html  css  js  c++  java
  • leetecode 3 最长无重复字符子串

    https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/

    暴力求解会超时。有两种滑动窗口的方法,时间都差不多。

        public int lengthOfLongestSubstring(String s) {
            int i = 0;
            int j = 0;
            int ans = 0;
            Set<Character> win = new HashSet<>();
            int n = s.length();
            while (i < n && j < n) {
                if (win.contains(s.charAt(j))) {
                    win.add(s.charAt(j));
                    ans = Math.max(ans, j - i);
                    j++;
                } else {
                    win.remove(s.charAt(i));
                    i++;
                }
            }
            return ans;
        }
    

    上面是第一种,思路是做一个滑动窗口,从头滑到尾,统计最长子串。

        public int lengthOfLongestSubstring2(String s) {
            int n = s.length();
            HashMap<Character,Integer> map = new HashMap<>();
            int j=0;
            int ans = 0;
            for(int i=0;i<n;i++){
                if(map.containsKey(s.charAt(i))){
                    j = Math.max(map.get(s.charAt(i)),j);
                }
                ans = Math.max(ans,i-j+1);
                map.put(s.charAt(i),i+1);
            }
            return ans;
        }

    第二种如上,我们在做滑动窗口的时候,假如我们的窗口为[j,i],然后Si'(索引是map[s[i]]-1)和Si重复,我们把j滑动到i'+1,然后重新计算子串长度。保留最大子串长度。

    这个要比找出最长子串简单一点。

    题解还给出了一个更快的方法,思路是一样的,但是利用一个长数组代替映射:

    public int lengthOfLongestSubstring(String s) {
            int n = s.length(), ans = 0;
            int[] index = new int[128]; // current index of character
            // try to extend the range [i, j]
            for (int j = 0, i = 0; j < n; j++) {
                i = Math.max(index[s.charAt(j)], i);
                ans = Math.max(ans, j - i + 1);
                index[s.charAt(j)] = j + 1;
            }
            return ans;
        }
    
    作者:LeetCode
    链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/wu-zhong-fu-zi-fu-de-zui-chang-zi-chuan-by-leetcod/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    解决vs2017创建.net core失败以及不能登录问题
    ocx控件的坑
    Sqlserver 高并发和大数据存储方案
    远程连接ejabberd的mnesia数据库
    基于ejabberd实现各个客户端消息同步
    小诗一首《钗头凤·七夕夜》
    微软office web apps 服务器搭建之在线文档预览(二)
    微软office web apps 服务器搭建之在线文档预览(一)
    基于ejabberd简单实现xmpp群聊离线消息
    yiwoSDK2.0完整版
  • 原文地址:https://www.cnblogs.com/superxuezhazha/p/12266632.html
Copyright © 2011-2022 走看看