目录
字母异位词
最长公共前缀
博主主页:东洛的克莱斯韦克-CSDN博客
字母异位词
49. 字母异位词分组 - 力扣(LeetCode)
这道题更像一道语法题,考察对容器的掌握情况。如果按题目要求去模拟,不仅要分析每个字符串,还要判断其他字符串是否是自己的异位词,时间复杂度会很高,代码实现也会很麻烦。
如果两个字符串是异位词,那么这两个字符串排好顺序后是一样的,那么我们可以用一张哈希表映射,k值为排序后的字符串,v值为异位词数组。
那么遍历完源字符串数组后,哈希表中所有的v值就是结果N个字符,排序会消耗
O(N⋅log(N)) 时间。
假设右N1个单词,分完组后再哈希表里拿结果,我们扫描一哈希遍表,最坏情况是一个组数等于单词数,时间复杂度为 O(N1),
class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string, vector<string>> hs;//字母异位词分组for (auto & str : strs) {string tmp = str;sort(tmp.begin(), tmp.end());hs[tmp].push_back(str);}vector<vector<string>> ret;//拿结果for (auto & v : hs) {ret.push_back(v.second);}return ret;}
};
最长公共前缀
14. 最长公共前缀 - 力扣(LeetCode)
这道题的算法思想就是模拟,我们可以先比较第一组字符串和第二组字符串,比较的结果在和其他组比较。
class Solution {
public:string longestCommonPrefix(vector<string>& strs) {string ret(strs[0]);for (auto & str : strs) {int count = 0, minSize = min(str.size(), ret.size());while (count < minSize && str[count] == ret[count]) count++;ret = str.substr(0, count);}return ret;}
};
count记录两组字符串的公共前缀,count再循环结束后指向的是公共前缀的下一个字符,刚好是左闭右开区间,所以count就是公共前缀的长度。