zoukankan      html  css  js  c++  java
  • Longest Substring Without Repeating Characters

    package cn.edu.xidian.sselab.hashtable;

    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Set;

    /**
     *
     * @author zhiyong wang
     * title: Longest Substring Without Repeating Characters
     * content:
     *    Given a string, find the length of the longest substring without repeating characters.
     *    For example, the longest substring without repeating letters for "abcabcbb" is "abc",
     *    which the length is 3.
     *    For "bbbbb" the longest substring is "b", with the length of 1
     *
     */
    public class LongestSubString {

        //这种方法,时间超时,如果字符串非常长,时间复杂度为O(n^2),肯定会超时,因为这是一个最优化问题,可以用动态规划来解
        public int lengthOfLongestSubString(String s){
            int length = s.length();
            if(length == 0) return 0;
            int max = 0;
            for(int i=0;i<length;i++){
                Set set = new HashSet();
                for(int j=i;j<length;j++){
                    if(!set.add(s.charAt(j)) && set.size() > max){
                        max = set.size();
                        break;
                    }        
                }
            }
            System.out.println(max);
            return max;
        }
        //参考大牛的思路,用一个map来保存,key表示s中的字符,value表示字符的下标,
        //同时用两个指针,第一个指向字符的下标,第二个指向出现相同的字符的下一个字符
        //时间复杂度为O(n)
        public int lengthOfLongestSubStrings(String s){
            int length = s.length();
            if(length == 0) return 0;
            int max = 0;
            Map<Character,Integer> map = new HashMap();
            for(int i=0,j=0;i<length;i++){
                if(map.containsKey(s.charAt(i))){
                    j = Math.max(j, map.get(s.charAt(i))+1);
                }
                map.put(s.charAt(i), i);
                max = Math.max(max, i - j + 1);
            }
            return max;    
        }
    }

  • 相关阅读:
    android 各国语言对应的缩写
    Android 程式开发:(十三)特殊碎片 —— 13.2 DialogFragment
    Android Bitmap和Canvas学习笔记 [转]
    Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
    XAMPP 在windows下无法启动Apache解决方案
    深入浅出Java并发包—锁机制(一)
    深入浅出Java并发包—锁(Lock)VS同步(synchronized)
    深入浅出Java并发包—CAS机制
    深入浅出Java并发包—指令重排序
    深入浅出Java并发包—原子类操作
  • 原文地址:https://www.cnblogs.com/wzyxidian/p/5167748.html
Copyright © 2011-2022 走看看