大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
- 字符串的处理
- 哈希表的应用
- 排序算法
题目解答方法的文字分析
这道题目要求将具有相同字母构成的字符串分组合并,并且按照每组中第一个字符串的首字母顺序进行排序。我们可以使用哈希表来实现这个功能。
思路如下:
- 遍历输入的字符串数组,对每个字符串进行排序,并将排序后的字符串作为键,原始字符串作为值放入哈希表中。这样相同字母构成的字符串会被归类到同一个键下。
- 对哈希表的键进行排序,这样可以保证每组字符串按照第一个字符串的首字母顺序进行排序。
- 将同一组的元素合并成一个字符串,并用逗号隔开,然后将不同组的字符串用逗号连接起来,得到最终的结果。
举个例子:对于输入 ["eat", "tea", "tan", "ate", "nat", "bat"],首先对每个字符串进行排序,得到哈希表:
"aet": ["eat", "tea", "ate"], "ant": ["tan", "nat"], "abt": ["bat"]
然后对哈希表的键进行排序,得到键的顺序为 ["aet", "ant", "abt"]。
接下来将同一组的元素合并成一个字符串,并用逗号隔开,得到最终结果:
["ate,eat,tea","bat", "nat,tan"]
本题解析所用的编程语言
C++
完整且正确的编程代码
#include <vector> #include <string> #include <unordered_map> #include <algorithm> using namespace std; class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param strs string字符串vector * @return string字符串vector */ vector<string> groupAnagrams(vector<string>& strs) { unordered_map<string, vector<string>> hashMap; // 对每个字符串进行排序,并将排序后的字符串作为键,原始字符串作为值放入哈希表中 for (const string& str : strs) { string sortedStr = str; sort(sortedStr.begin(), sortedStr.end()); hashMap[sortedStr].push_back(str); } vector<string> result; // 对哈希表的键进行排序 vector<string> sortedKeys; for (auto it = hashMap.begin(); it != hashMap.end(); ++it) { sortedKeys.push_back(it->first); } sort(sortedKeys.begin(), sortedKeys.end()); // 将同一组的元素合并成一个字符串,并用逗号隔开 for (const string& key : sortedKeys) { vector<string>& group = hashMap[key]; string combinedStr = ""; for (int i = 0; i < group.size(); ++i) { combinedStr += group[i]; if (i < group.size() - 1) { combinedStr += ","; } } result.push_back(combinedStr); } return result; } };