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

    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.

    Code 1: The algorithm is simple and the running time is O(n), where n is the length of the string

    public class Solution {
        public int lengthOfLongestSubstring(String s) {
           int max = 0;
    		int length = s.length();
    		if(length > 0){
    			Map<Character, Integer> distinguish = new HashMap<Character, Integer>();
    			int startIndex = 0;
    			for(int i = 0; i < length; ++i){
    				if(distinguish.containsKey(s.charAt(i))) {
    					int temp = distinguish.get(s.charAt(i));
    				
    					for(int j = startIndex; j < temp + 1; ++j)
    						distinguish.remove(s.charAt(j));
    				
    					startIndex = temp + 1;
    				}
    				distinguish.put(s.charAt(i), i);
    				max = Math.max(max, i - startIndex + 1);
    			}
    		}
    		return max;    
        }
    }
    

      

    Code 2:

     1 public class Solution {
     2     public int lengthOfLongestSubstring(String s) {
     3         int len = 0;
     4         HashSet<Character> hset = new HashSet<Character>(); 
     5         if(s.length() > 0){
     6             StringBuffer temp = new StringBuffer();
     7             temp.append(s.charAt(0));
     8             hset.add(s.charAt(0));
     9             ++len;
    10             for(int i = 1; i < s.length(); ++i){
    11                 if(hset.contains(s.charAt(i))){
    12                     StringBuffer abf = new StringBuffer();
    13                     abf.append(s.charAt(i));                    
    14                     int index = temp.indexOf(abf.toString());
    15                     temp.delete(0, index + 1);
    16                 }
    17                 else
    18                     hset.add(s.charAt(i));                
    19                 temp.append(s.charAt(i));
    20                 if(temp.length() > len)
    21                     len = temp.length();
    22             }            
    23         }
    24         return len;
    25     }
    26 }
  • 相关阅读:
    gearman简介及安装使用
    Linux下进程的建立
    Linux中无缓冲文件I/O API
    XMLRPC for PHP简介及使用
    数据库水平切分方法
    LVS简介及使用
    进程通信之消息队列
    install docker/dockercompose
    centOS7 下安装 JDK
    iTerm2/firewall/pulsar
  • 原文地址:https://www.cnblogs.com/averillzheng/p/3536686.html
Copyright © 2011-2022 走看看