2つの文字列が互いの順列であるかどうかを判断するプログラムを作成しました。私はハッシュテーブルを使ってそうしようとしています。ここに私のコードです:2つの文字列が互いの順列であるかどうかを判断するプログラムの時間複雑度
bool permutation(string word1, string word2) {
unordered_map<char, int> myMap1;
unordered_map<char, int> myMap2;
int count1 = 0;
int count2 = 0;
if (word1.length() == word2.length()) {
for (int i = 0; i < word1.length(); i++) {
count1++;
count2++;
for (int j = 0; j < word1.length(); j++) {
if (word1[i] == word1[j] && myMap1.find(word1[i]) == myMap1.end()) {
count1++;
}
if (word2[i] == word2[j] && myMap2.find(word1[i]) == myMap2.end()) {
count2++;
}
}
myMap1.insert({word1[i], count1});
myMap2.insert({word2[i], count2});
}
}
else {
return false;
}
return (myMap1.size() == myMap2.size());
}
int main() {
string word1;
string word2;
getline(cin, word1);
getline(cin, word2);
bool result = permutation(word1, word2);
return 0;
}
私は上記のコードの時間の複雑さはO(n^2)だと思います。ネストされたループの使用を伴わないアルゴリズムは考えられませんでした。ハッシュテーブルを使ってこれを行うより速い方法がありますか?
は、なぜあなたは、ハッシュテーブルを使用する必要があります:次のように言葉
結果がでてきましたか?文字列内の文字をソートし、ソートされた2つの文字列が同じ場合は、もう一方の並べ替えを行います。 –
@lapteveloper並べ替えはn log(n)ですが、これは線形時間で実行できます。 –
私はこのプログラムのために1つを試してみたかったので、ハッシュテーブルでより良くなるようにしています。 – CheetahBongos