本「Cracking the Coding Interview」とこのStack Overflow questionでは、文字列にすべての一意の文字が含まれているかどうかを判断する関数について説明しています。ビットシフトを使用する本の回答は質問リンクにあります (ページの一番上の回答を参照してください)。ここでは繰り返しません。
Javaの回答にはO(N)の複雑さがあり、O(N)が実際に何を意味するのか理解できません。私は実際に、今書いたこの実装の時間計算量を知りたいと思っています。O(N) ですか?複雑さをどのように把握しますか?
static void Main(string[] args)
{
string stringToCheck ;
bool hasAllUniqueChars = false;
stringToCheck = "Test";
hasAllUniqueChars = CheckForUniqueChars(stringToCheck);
Console.WriteLine("String is Unique {0}", hasAllUniqueChars);
Console.Read();
}
private static bool CheckForUniqueChars(string stringToCheck)
{
for (int i = 0; i < stringToCheck.Length - 1; i++)
{
for (int j = i; j < stringToCheck.Length - 1; j++)
{
if (Char.ToUpper(stringToCheck.ElementAt(i)) ==
Char.ToUpper(stringToCheck.ElementAt(j+1)))
{
return false;
}
}
}
return true;
}
これは、Test、test、Hello に対して false を返し、SuperMan、SpiderMan、および Sponge に対して true を返し、正常に動作します。
ありがとうございました