20.12.16
作者:互联网
题目
给定一种规律 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 包含了由单个空格分隔的小写字母。
思路
- 纯模拟,不过提交了四次错误答案,都是跟着答案改的,因为很多情况没想到
- 第一次补了set,第二次补了j!=size,第三次补了i!=size,第四次补了str==""的情况
- 思路就是,遍历pattern,用map存对应的单词string,用set判断string是否已经存在了(即避免不同pattern相同sting的情况),如果map没有pattern[i],则插入map,并更新set;如果map有,则判断string和map里的string是否相同
- 如果pattern没遍历完或s没遍历完,都是错误情况
代码
class Solution {
public:
bool wordPattern(string pattern, string s) {
unordered_map<char, string> rec;
unordered_set<string> check;
int i = 0, j = 0, pCount = 0, sCount = 0;
for(; i < pattern.size(); ++i){
while(s[j] == ' ') ++j;
string str;
for(; j < s.size(); ++j){
if(s[j] == ' ') break;
str += s[j];
}
if(str == "") return false;
if(rec.count(pattern[i]) == 0){
if(check.count(str) != 0) return false;
check.insert(str);
rec[pattern[i]] = str;
}else{
if(rec[pattern[i]] != str) return false;
}
}
if(j != s.size() || i != pattern.size()) return false;
return true;
}
};
标签:false,string,16,pattern,dog,str,20.12,size 来源: https://www.cnblogs.com/wasi-991017/p/14141960.html