給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。
示例:
輸入: ["eat", "tea", "tan", "ate", "nat", "bat"],
輸出:[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
說明:
所有輸入均為小寫字母。
不考慮答案輸出的順序。
設定乙個map向量,專門用來統計字串中,所有字元出現的頻率,比較一下即可
這個方法在實現過程中遇到了不少問題,乙個是時間複雜度太高,所以我使用快速排序,按照字串長度從小到大進行排序,如此一來可以大幅減少時間
c++**:
class solution
// 獲取匹配字串資訊
for (int j = 0; j < temp[0].size(); j++)
// 開始匹配
for (int i = 0; i < strs.size(); i++)
if (hash_char2.empty())
}ans.push_back(temp);
temp.clear();
hash_char.clear();
hash_char2.clear();
} return ans;
} // 下面兩個函式都是快排演算法
void sort_str_len(vector& strs, int begin, int end)
int partition_len(vector& strs, int p1, int p2)
} s = strs[p2];
strs[p2] = strs[i + 1];
strs[i + 1] = s;
i = i + 1;
return i;
}};
執行效率:
太慢了。看來要換一種方法。
如果兩個字串僅僅是排序不同,那麼可以通過sort函式,使得字串按照字母的ascii大小公升序排序,重新排列,這樣就很容易的判斷兩個字串是否為字母異位詞了。
c++**:
class solution
for (auto temp : hash_t)
ans.push_back(temp.second);
return ans;
}};
執行效率
LeetCode 49 字母異位詞分組
給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。示例 輸入 eat tea tan ate nat bat 輸出 ate eat tea nat tan bat 說明 所有輸入均為小寫字母。不考慮答案輸出的順序。這道題的意思就是把含有相同字母的單詞歸類而已,思路其實...
LeetCode 49 字母異位詞分組
給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。示例 輸入 eat tea tan ate nat bat 輸出 ate eat tea nat tan bat 說明 此題輸入的是乙個字串陣列,遍歷該陣列,然後將每個字串排序,排序後的字串作為 鍵 存入雜湊表,對應的...
leetcode 49 字母異位詞分組
leetcode 49.字母異位詞分組 給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。演算法1 根據字典序排序後相同的兩個字串是字母異位詞 將字串陣列中的每個字串進行排序,排序後相同的字串被分到相同的組別 演算法在輸入規模較大的情況下超時 演算法2 對於字串列表中...