私は時間の複雑さについていくつか読んでおり、基本をカバーしています。概念を強化するために、私が最近 SO で提供した回答を調べました。理由により、質問は終了しましたが、それは重要ではありません。回答の複雑さがわかりません。有用なフィードバックを得る前に質問が閉じられました。
タスクは、文字列内の最初の一意の文字を見つけることでした。私の答えは簡単なものでした:
public String firstLonelyChar(String input)
{
while(input.length() > 0)
{
int curLength = input.length();
String first = String.valueOf(input.charAt(0));
input = input.replaceAll(first, "");
if(input.length() == curLength - 1)
return first;
}
return null;
}
私が最初に考えたのは、各文字を見て、次に各文字をもう一度見るreplaceAll()
ので、O(n^2) になるということでした。
しかし、それが実際にどのように機能するかについて考えるようになりました。検査された文字ごとに、文字列内のその文字のすべてのインスタンスが削除されます。そのn
ため、常に縮小しています。それはどのように考慮されますか?それはO(log n)になりますか、それとも私が見ていないものがありますか?
私が求めているもの:
書かれたアルゴリズムの時間計算量はどのくらいですか? またその理由は?
私が求めていないこと:
私はそれを改善するための提案を探していません。おそらくこれを行うためのより良い方法があると思います。時間の複雑さの概念をよりよく理解しようとしていますが、最良の解決策を見つけることはできません。