290. 单词规律
给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern = "abba", str = "dog cat cat dog"输出: true示例 2:
输入:pattern = "abba", str = "dog cat cat fish"输出: false示例 3:
输入: pattern = "aaaa", str = "dog cat cat dog"输出: false示例 4:
输入: pattern = "abba", str = "dog dog dog dog"输出: false说明:你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母。
第一版,自己写的,参照以前的一个题目,经典的hash方法,非常好
执行用时 :4 ms, 在所有 cpp 提交中击败了76.14%的用户
内存消耗 :8.4 MB, 在所有 cpp 提交中击败了81.29%的用户
boolwordPattern(stringpattern, stringstr) {
unordered_map<char, int>patMp;
unordered_map<string, int>strMp;
stringtemp="";
inta=1;
unsignedi, j;
for (i=0, j=0; i<pattern.size() &&j<str.size(); ++j, ++i) {
temp="";
patMp[pattern[i]] +=i+a;
//cout << "pat " << pattern[i] << " int " << patMp[pattern[i]] << endl;
while (str[j] !=' '&&j<str.size()) {
temp+=str[j++];
}
strMp[temp] +=i+a;
//cout << "str " << temp << " int " << strMp[temp] << endl;
if (patMp[pattern[i]] !=strMp[temp]) returnfalse;
}
//cout << i <<" "<< j << endl;
returni==pattern.size()&&j==str.size()+1;
}
645. 错误的集合
集合 S
包含从1到 n
的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。
给定一个数组 nums
代表了集合 S
发生错误后的结果。你的任务是首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
示例 1:
输入: nums = [1,2,2,4]
输出: [2,3]
注意:
- 给定数组的长度范围是 [2, 10000]。
- 给定的数组是无序的。
第一版,自己写的
执行用时 :68 ms, 在所有 cpp 提交中击败了32.82%的用户
内存消耗 :20.6 MB, 在所有 cpp 提交中击败了18.10%的用户
vector<int>findErrorNums(vector<int>&nums) {
unordered_set<int>un_st;
intlen=nums.size(), sum,res;
sum= (len+1) *len/2;
for (unsignedi=0; i<len; ++i) {
if (un_st.insert(nums[i]).second) {
sum-=nums[i];
}
else
{
res=nums[i];
}
}
return { res,sum };
}