簡體   English   中英

查找沒有連續重復字符的最長子字符串的長度

[英]Find the length of the longest substring with no consecutive repeating characters

在最近的一次采訪中,我被要求查找沒有連續重復字符的最長子字符串的長度。 這與標准問題不同,因為它僅考慮連續的重復字符。

例如 :

WOOD : 2

Italics : 7

當然,這必須在O(N)時空中完成。

逐個字符地向下鍵入字符串。 跟蹤您前進了多少個字符,而無需在變體中重復說“ 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));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM