LeetCode 290. Word Pattern

Posted co0oder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 290. Word Pattern相关的知识,希望对你有一定的参考价值。

不符合的情况有三种:1、pattern和str长度不符   2、pattern中不同字母指向str中同一词(a、b->同一词)   3、同一字母指向不同词(a->不同词)

 

 1 class Solution {
 2 public:
 3     vector<string> split(string str){
 4         vector<string> res;
 5         string tmp = "";
 6         for(int i = 0; i < str.length(); ++i){
 7             if(str[i] !=  ) {
 8                 if(i == str.length() - 1) res.push_back(tmp + str[i]);
 9                 tmp += str[i];
10             }
11             else{
12                 res.push_back(tmp);
13                 tmp = "";
14             }
15         }
16         return res;
17     }
18     bool wordPattern(string pattern, string str) {
19         vector<string> res = split(str);
20         
21         if(pattern.length() != res.size()) return false;
22         map<char, string> corre;
23         map<char, string>::iterator it;
24         set<string> word;
25         set<string>::iterator itr;
26         for(int i = 0; i < pattern.length(); ++i){
27             it = corre.find(pattern[i]);
28             if(it == corre.end()){
29                 itr = word.find(res[i]);
30                 if(itr != word.end()) return false;
31                 corre.insert(pair<char, string>(pattern[i], res[i]));
32                 word.insert(res[i]);
33             }
34             else{
35                 if(it->second != res[i]) return false;
36             }
37         }
38         return true;
39     }
40 };

map存字母和单词的对应关系,set存出现过的单词。

if(it == corre.end()) 即该字母未出现过,如果对应的单词已出现,则代表多字母对应同一词,return false.
else 该字母出现过,如果之前出现过的同一字母对应的却是不同的单词,return false.


以上是关于LeetCode 290. Word Pattern的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode_290. Word Pattern

[leetcode]290.Word Pattern

leetcode?python 290. Word Pattern

leetcode290. Word Pattern

LeetCode 290. Word Pattern

Leetcode_290_Word Pattern