0

問題は、特定の文字列に重複する文字がないかどうかを判断することです。制約は、文字列に文字az(小文字のみ)のみが含まれることです。

明らかな解決策は、配列(またはハッシュテーブル)を使用して、遭遇した文字を追跡することです。ただし、問題は、データ構造の使用が許可されていないことです。

以下は、問題の1つの解決策です。しかし、私はそれがどのように機能しているかを完全には理解していません。遭遇した文字を追跡するために整数のビットを使用していることがわかります。

public 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;
}
4

2 に答える 2

1

あなたはそれが各文字のビットを設定するという点で正しいです。ただし、最初に(ビット単位のandを使用して)チェックし、現在の文字がすでに見つかっている場合は、文字列に一意の文字が含まれていないことを認識します。

于 2012-04-13T03:50:23.453 に答える
0

説明してみます。 int checker;は 32 ビット表現です。a ~ z は合計 26 文字であるため、使用されている文字にフラグを付けるには 32 ビット (1 つの整数型データ) で十分です。 checker |= (1 << val);az 文字が使用されたことを示すために使用されます。多分それはあなたを助けることができます:)

于 2012-04-13T03:54:40.027 に答える