0

文字列内の重複する単語を検出する方法は何ですか?

たとえば、「this is a test message for duplicate test」には、重複した単語 test が 1 つ含まれています。

ここでの目的は、文字列で発生するすべての重複単語を検出することです。

目標を達成するには、正規表現を使用することをお勧めします。

4

2 に答える 2

8

正規表現でできる最善のことは、O(N^2)検索の複雑さです。O(N)入力を単語に分割し、HashSet を使用して重複を検出することにより、時間と空間の検索の複雑さを簡単に実現できます。

于 2012-09-19T15:03:52.510 に答える
3

次の Java コードは、文字列から重複を検出する問題を解決します。重複する単語が改行または句読点記号で区切られていれば問題ありません。

    String duplicatePattern = "(?i)\\b(\\w+)\\b[\\w\\W]*\\b\\1\\b";
    Pattern p = Pattern.compile(duplicatePattern);
    String phrase = "this is#$;%@;<>?|\\` p is a is Test\n of duplicate test";
    Matcher m = p.matcher(phrase);
    String val = null;
    while (m.find()) {
        val = m.group();
        System.out.println("Matching segment is \"" + val + "\"");
        System.out.println("Duplicate word: " + m.group(1)+ "\n");
    }

コードの出力は次のようになります。

Matching segment is "is#$;%@;<>?|\` p is a is"
Duplicate word: is

Matching segment is "Test
 of duplicate test"
Duplicate word: Test

ここで、m.group(1) ステートメントは、パターンの最初のグループ [ここでは (\\w+)] に一致する文字列を表します。

于 2012-09-19T14:55:45.493 に答える