2014-04-17 159 views
1

在最近的一次採訪中,我被要求查找沒有連續重複字符的最長子字符串的長度。這與標準問題不同,因爲它只考慮連續的重複字符。查找沒有連續重複字符的最長子字符串的長度

例如:

WOOD : 2 

Italics : 7 

這當然,在O(N)時間和空間來進行。

+2

那麼你的問題是什麼? – wnnmaw

+6

當然,「WOOD」最長的子串是兩個字符長? 「WO」或「OD」 – Kevin

+0

這是一個非常標準的編程問題,你通常會在大學裏教某個時間。你的企圖在哪裏? – Kon

回答

3

沿着字符串逐個字符。跟蹤你已經提前多少個字符,而無需在var中重複說「repeatcounter」。如果下一個字符與當前字符記錄的計數器在一個單獨的變量中(只有當它大於已經存在的內容時)並重置重複計數器。

2

在Python,我將接近這樣的:

def interview(s): 
    current = longest = 0 
    for index, char in enumerate(s): 
     if index and char == s[index - 1]: 
      longest, current = max(longest, current), 0 
     current += 1 
    return max(longest, current) 
0
public static void main(String[] args){ 
    String s = "italics"; 
    char[] c = s.toCharArray(); 
    int tmp = 1; 
    for (int i = 1; i < s.length(); i++) { 
     if (c[i] == c[i-1]){ 
      tmp = 0; 
      continue; 
     } 
     tmp++; 
    } 
    System.out.println(tmp); 
} 

輸出= 1

S = 「斜體」

輸出= 7

0

希望下面的代碼可以幫助你。謝謝。

import java.util.HashSet; 

public class SubString { 
    public static String subString(String input){ 

     HashSet<Character> set = new HashSet<Character>(); 

     String longestOverAll = ""; 
     String longestTillNow = ""; 

     for (int i = 0; i < input.length(); i++) { 
      char c = input.charAt(i); 

      if (set.contains(c)) { 
       longestTillNow = ""; 
       set.clear(); 
      } 
      longestTillNow += c; 
      set.add(c); 
      if (longestTillNow.length() > longestOverAll.length()) { 
       longestOverAll = longestTillNow; 
      } 
     } 

     return longestOverAll; 
    } 

    public static void main(String[] args) { 
     String input = "kaveeshkanwal abcvdghytrqp";//"substringfindout"; 
     System.out.println(subString(input)); 
    } 
} 
相關問題