我已經編寫了一個程序來確定兩個字符串是否是彼此的排列。我正在嘗試使用哈希表來實現。這裏是我的代碼:確定兩個字符串是否彼此排列的程序的時間複雜度
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)。我想不出一個不涉及使用嵌套循環的算法。有沒有更快的方法來做到這一點使用哈希表?
爲什麼你需要使用一個哈希表?對字符串中的字符進行排序,如果兩個排序的字符串相同,則一個是另一個排列。 –
@latedeveloper排序將是n log(n),而這可以在線性時間完成。 –
我試圖用散列表更好,所以我想嘗試使用這個程序。 – CheetahBongos