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 }
  • 相关阅读:
    Java 中的悲观锁和乐观锁的实现
    乐观锁和悲观锁的区别
    理解RESTful架构
    修复Linux下curl等无法使用 Let's Encrypt 证书
    呕心沥血 AR VR 好资源分享
    linux服务器出现大量TIME_WAIT的解决方法
    Ubuntu系统 无法删除 redis-server
    Python Flask jsonify a Decimal Error
    微信小程序 订阅消息 对接详细记录
    FTP时显示500 Illegal PORT command的解决
  • 原文地址:https://www.cnblogs.com/averillzheng/p/3536686.html
Copyright © 2011-2022 走看看