問題
ある文字列内に重複する文字列があるかどうかを効率的に検出する方法はありますか?
解答
Javaには文字列の重複を検出するためのいくつかの方法がありますが、その中でもHashSetを使用するのが効果的です。以下は具体的なコード例です。
import java.util.HashSet;
import java.util.Set;
public class DuplicateStringDetector {
public static boolean hasDuplicate(String input) {
Set<Character> charSet = new HashSet<>();
for (char c : input.toCharArray()) {
if (!charSet.add(c)) {
// 重複が検出された場合
return true;
}
}
// 重複がない場合
return false;
}
public static void main(String[] args) {
String inputString = "abcdeff";
if (hasDuplicate(inputString)) {
System.out.println("重複があります。");
} else {
System.out.println("重複はありません。");
}
}
}
この例では、文字列を一文字ずつ見ながらHashSetに追加していきます。HashSetは重複を許容しないため、追加が成功した場合は新しい文字であり、失敗した場合は既に同じ文字が存在していることを示します。
この方法を使用すると、文字列内の重複をO(n)の時間で検出することができます。