【プログラミング練習問題】1つのアルゴリズムを実現し、1つの文字列のすべての文字が異なるかどうかを決定する.追加のデータ構造の使用が許可されていない場合、どのように処理すればいいですか.
1168 ワード
アルゴリズムを記述する前に、ascii文字列かunicode文字列かを確認します.
Asciiコードテーブルは最大256文字:ASCII文字1 byte=8 bitを1バイトで格納するので、最大2^8=256文字まで格納できます
標準ASCIIコード:7ビット符号で、余分な1ビット(最上位)はコンピュータ内部で通常0(データ伝送時にパリティビットとして使用可能)に維持されます.128文字
0~31および127(計33個)は、制御文字または通信専用文字(残りは表示可能文字)
32~126(合計95個)は文字(32はスペース)、
そのうち48~57は0~9 10アラビア数字
65~90は26文字の大文字英字で、
97~122番は26個の小文字英字で、残りはいくつかの句読点、演算記号などである.
拡張ASCIIコード:8ビットコードを使用して、256文字
考え方:
1.異なるascii文字は最大256個あるのでbool型配列char_を設定set、256個の要素を含み、初期はfalse
2.文字列の文字を順次取得してint値に変換し、そのint値をbool型配列の下付き文字としてtrue,ifであるかどうかを確認する(char_set[i])
同じ値が同じ文字であることを示す場合、return false;
そうでなければ対応する値をtrueすなわちchar_に設定set[i] = true;
コードは次のように実装されます.
Asciiコードテーブルは最大256文字:ASCII文字1 byte=8 bitを1バイトで格納するので、最大2^8=256文字まで格納できます
標準ASCIIコード:7ビット符号で、余分な1ビット(最上位)はコンピュータ内部で通常0(データ伝送時にパリティビットとして使用可能)に維持されます.128文字
0~31および127(計33個)は、制御文字または通信専用文字(残りは表示可能文字)
32~126(合計95個)は文字(32はスペース)、
そのうち48~57は0~9 10アラビア数字
65~90は26文字の大文字英字で、
97~122番は26個の小文字英字で、残りはいくつかの句読点、演算記号などである.
拡張ASCIIコード:8ビットコードを使用して、256文字
考え方:
1.異なるascii文字は最大256個あるのでbool型配列char_を設定set、256個の要素を含み、初期はfalse
2.文字列の文字を順次取得してint値に変換し、そのint値をbool型配列の下付き文字としてtrue,ifであるかどうかを確認する(char_set[i])
同じ値が同じ文字であることを示す場合、return false;
そうでなければ対応する値をtrueすなわちchar_に設定set[i] = true;
コードは次のように実装されます.
bool isUniqueChars(string str)
{
//ascii 256 , 256 false
if (str.length() > 256) return false;
// , , , true.
bool[] char_Set = new bool[256]; // false
for (int i = 0; i < str.length; i++)
{
int val = str[i]; // , int int
if (char_Set[val])
{
return false;
}
char_Set[val] = true; // , value true
}
}