これは、Gayle Laakmann McDowell によるCracking the Coding Interviewブックの質問の 1 つです。
文字列にすべての一意の文字が含まれているかどうかを判断するアルゴリズムを実装します。追加のデータ構造を使用できない場合はどうなりますか?
著者は次のように書いています。
ビットベクトルを使用することで、スペースの使用量を少し減らすことができます。以下のコードでは、文字列が小文字
'a'
から'z'
. これにより、int を 1 つだけ使用できるようになります。
著者はこの実装を持っています:
public static boolean isUniqueChars(String str) {
int checker = 0;
for (int i = 0; i < str.length(); ++i) {
int val = str.charAt(i) - 'a';
if ((checker & (1 << val)) > 0)
return false;
checker |= (1 << val);
}
return true;
}
「文字列は小文字のみ」という仮定を取り除くとしましょ'a'
う'z'
。代わりに、文字列には、ASCII 文字や Unicode 文字など、あらゆる種類の文字を含めることができます。
作成者と同じくらい効率的なソリューション (または、作成者のものと同じくらい効率的であることに近いソリューション) はありますか?
関連する質問: