-1

文字列パラメーターを受け入れ、文字列がすべて異なる文字で構成されているかどうかに応じてまたはを返す Java 関数をどのように実装するのが最善でしょうか。truefalse

これはインタビューの質問です。実装では、ビット マスキングを使用して文字の出現を格納する必要があり、その他の補助データ構造は使用しないでください。

注:ビットマスキングを使用する必要があるため、この質問は次の質問とは異なります。

リクエストに応じて、これまでのところ私の努力はここにあります。可能であれば、今すぐ質問を再開してください。

public static boolean hasAllUniqueCharactersUsingBitMasking(String string) {
  final int length = string.length();
  final int nBitsToStoreAllUnicodeCharacters =
      (int) Math.ceil(Math.log(Character.MAX_CODE_POINT) / Math.log(2d));
  BitSet bitSet = new BitSet(nBitsToStoreAllUnicodeCharacters);
  for (int i = 0; i < length; i++) {
    char c = string.charAt(i);
    if (bitSet.get(c)) {
      return false;
    }
    bitSet.set(c);
  }
  return true;
}
4

3 に答える 3

4

コーディングインタビューのクラッキングによると:

public static boolean isUniqueChars(String str) {
  if (str.length() > 256) { 
    return false;
  }
  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;
}
于 2012-08-15T19:27:06.217 に答える
0
public static boolean isUniqueCharsBitSet(String str) {

if (str.length() > 256) {
        return false;
    }

    BitSet set = new BitSet();
    for (int i = 0; i < str.length(); ++i) {
        int val = str.charAt(i) - 'a';
        if (!(set.get(val))) {
            set.set(val);
        } else {
            return false;
        }

    }
    return true;

}

于 2015-10-02T05:32:02.027 に答える