在最近的一次採訪中,我被要求查找沒有連續重複字符的最長子字符串的長度。這與標準問題不同,因爲它只考慮連續的重複字符。查找沒有連續重複字符的最長子字符串的長度
例如:
WOOD : 2
Italics : 7
這當然,在O(N)時間和空間來進行。
在最近的一次採訪中,我被要求查找沒有連續重複字符的最長子字符串的長度。這與標準問題不同,因爲它只考慮連續的重複字符。查找沒有連續重複字符的最長子字符串的長度
例如:
WOOD : 2
Italics : 7
這當然,在O(N)時間和空間來進行。
沿着字符串逐個字符。跟蹤你已經提前多少個字符,而無需在var中重複說「repeatcounter」。如果下一個字符與當前字符記錄的計數器在一個單獨的變量中(只有當它大於已經存在的內容時)並重置重複計數器。
在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)
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
希望下面的代碼可以幫助你。謝謝。
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));
}
}
那麼你的問題是什麼? – wnnmaw
當然,「WOOD」最長的子串是兩個字符長? 「WO」或「OD」 – Kevin
這是一個非常標準的編程問題,你通常會在大學裏教某個時間。你的企圖在哪裏? – Kon