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 }
  • 相关阅读:
    2017.5.11下午学习内容
    windows消息和消息队列
    探索Win32系统之窗口类(转载)
    WinMain函数详解(转载)
    Ajax爬取实战头条街拍美图
    Ajax实战微博
    Ajax请求分析实战
    ubuntu 安装rails
    ubuntu Thunderbird 接收邮件显示乱码的问题排除
    ubuntu 开机挂载windows分区
  • 原文地址:https://www.cnblogs.com/averillzheng/p/3536686.html
Copyright © 2011-2022 走看看