簡體   English   中英

如何檢查2個字符串是否具有n個字母的公共子字符串

[英]How to check if 2 strings have common substrings with n letters

我要求編寫代碼來檢查 2 個字符串是否具有帶有 n 個字母的公共子字符串。 n 變量將由用戶輸入,即需要找到多少個共同字母。

例如,如果我輸入n=2並且這些是兩個字符串:

"THE FIRST BANK OF AMERICA"
"A MAN NAMED ICARUS WANTED TO FLY TO THE SUN "

它會打印這個:

TH HE E F AN AM ME IC CA 

我需要代碼簡單,因為我們剛剛開始,所以我不能使用 Java 中的任何特殊庫。

我會 go 在每個字符串上,將 n 長度的子字符串提取到一個集合中,然后將兩者相交:

public static void main(String[] args) {
    int n = 2;
    String s1 = "THE FIRST BANK OF AMERICA";
    String s2 = "A MAN NAMED ICARUS WANTED TO FLY TO THE SUN";

    Set<String> substrings1 = getSubstrings(s1, n);
    Set<String> substrings2 = getSubstrings(s2, n);

    substrings1.retainAll(substrings2);
    System.out.println(substrings1);
}

private static Set<String> getSubstrings(String s, int n) {
    return IntStream.range(0, s.length() - n + 1)
                    .mapToObj(i -> s.substring(i, i + n))
                    .collect(Collectors.toCollection(LinkedHashSet::new));
}

注意: \

  1. 我使用了Collectors.toCollection(LinkedHashSet::new)來保留子字符串的順序,以便按照與問題中指定的順序相同的順序獲取 output。 如果訂單無關緊要,您可以使用Collectors.toSet()代替,這樣會快一點。
  2. 此示例使用硬編碼的 n 和兩個字符串。 相同的算法當然可以應用於用戶輸入,但為了簡潔起見,我將其省略。

暫無
暫無

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

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