Cool说丨力扣290与645

简介: [290. 单词规律](https://leetcode-cn.com/problems/word-pattern/)[645. 错误的集合](https://leetcode-cn.com/problems/set-mismatch/)

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]

注意:

  1. 给定数组的长度范围是 [2, 10000]。
  2. 给定的数组是无序的。

第一版,自己写的

执行用时 :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 };

     

   }


目录
相关文章
|
人工智能 C# C++
Cool说丨力扣153、454
153. 寻找旋转排序数组中的最小值 454. 四数相加 II
132 1
|
C# C++
Cool说丨力扣287/792/378
关注博主,获取更多知识
106 0
|
C# C++ 索引
Cool说丨力扣162
162. 寻找峰值
97 0
|
存储 C# C++
Cool说丨力扣29/34
关注博主。获取更多知识
105 0
|
存储 C# C++
Cool说丨力扣392
392. 判断子序列
75 0
|
C# C++
Cool说丨力扣744、704
744. 寻找比目标字母大的最小字母 704. 二分查找
107 0
|
C#
Cool说丨力扣475
475. 供暖器
115 0
|
机器学习/深度学习 算法 C#
Cool说丨力扣202
202. 快乐数
101 0
|
C#
Cool说丨力扣167
167. 两数之和 II - 输入有序数组
71 0
|
C# C++
Cool说丨力扣374、441
441. 排列硬币 374. 猜数字大小
91 0