文字列内の重複する単語を検出する方法は何ですか?
たとえば、「this is a test message for duplicate test」には、重複した単語 test が 1 つ含まれています。
ここでの目的は、文字列で発生するすべての重複単語を検出することです。
目標を達成するには、正規表現を使用することをお勧めします。
文字列内の重複する単語を検出する方法は何ですか?
たとえば、「this is a test message for duplicate test」には、重複した単語 test が 1 つ含まれています。
ここでの目的は、文字列で発生するすべての重複単語を検出することです。
目標を達成するには、正規表現を使用することをお勧めします。
正規表現でできる最善のことは、O(N^2)
検索の複雑さです。O(N)
入力を単語に分割し、HashSet を使用して重複を検出することにより、時間と空間の検索の複雑さを簡単に実現できます。
次の 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+)] に一致する文字列を表します。