标题哈希表
标题242.有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true
示例 2: 输入: s = “rat”, t = “car” 输出: false
说明: 你可以假设字符串只包含小写字母。
总结:
1.哈希表就是一个带有字母的一一对应的表格。
2.只用一个表格,另一个覆盖减去出现的次数。
3、for循环 i < t.size(),不是《= ,报错存储不够。
时间复杂度为O(n),空间上因为定义是的一个常量大小的辅助数组,所以空间复杂度为O(1)。
字母异位不是包括。
class Solution {
public:
bool isAnagram(string s, string t) {
int record[26] = {0};
for (int i = 0; i < s.size(); i++) {
// 并不需要记住字符a的ASCII,只要求出一个相对数值就可以了
record[s[i] - 'a']++;
}
for (int i = 0; i < t.size(); i++) {
record[t[i] - 'a']--;
}
for (int i = 0; i < 26; i++) {
if (record[i] != 0) {
// record数组如果有的元素不为零0,说明字符串s和t 一定是谁多了字符或者谁少了字符。
return false;
}
}
// record数组所有元素都为零0,说明字符串s和t是字母异位词
return true;
}
};
标题383.赎金信
总结:
1、记录长度大的数组 —小的数组,小于0说明是假的,已经遍历完数组
// 时间复杂度: O(n)
// 空间复杂度:O(1)
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int record[26] = {0};
for (int i = 0; i < magazine.length(); i++) {
// 通过recode数据记录 magazine里各个字符出现次数
record[magazine[i]-'a'] ++;
}
for (int j = 0; j < ransomNote.length(); j++) {
// 遍历ransomNote,在record里对应的字符个数做--操作
record[ransomNote[j]-'a']--;
// 如果小于零说明ransomNote里出现的字符,magazine没有
if(record[ransomNote[j]-'a'] < 0) {
return false;
}
}
return true;
}
};
标题49.字母异位分组
- 属于同一组的所有值都将映射到同一组中。
- 需要分成不同组的值不会映射到同一组。
总结:
1、使用vector 容器,动态扩展,弹夹‘
2、map 配对。第一个索引, 然后sort排序,
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> result;
map<string ,vector<string>> M;
for(int i=0; i < strs.size(); i++) {
string key = strs[i];
sort(key.begin(),key.end());
M[key].push_back(strs[i]);
}
for(auto it = M.begin();it != M.end(); it ++)
result.push_back(it->second);
return result;
}
};
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
/* 根据返回值定义存储结果的变量 */
vector<vector<string>> result;
unordered_map<string, vector<string>> map;
for (string& str: strs) {
string key = str;
/* 将串排序后便于同一作为键 */
sort(key.begin(), key.end());
/* 将相同键值的字符串放入vector容器中 */
map[key].push_back(str);//emplace_back
}
/* 取出相同键值的vector */
for (auto it = map.begin(); it != map.end(); ++it)
result.push_back(it->second);
return result;
}
};