[Leetcode] 第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

二、题目分析

题目比较简单,注意两点

1)需要建立字母和单词一一对应的关系

2)注意用空格分割字符串的时候,最后一个单词后面没有空格

三、代码

 1 class Solution {
 2 public:
 3     bool wordPattern(string pattern, string str) {
 4         if (pattern == "")return false;
 5         map<char, string>mp1;
 6         map<string, char>mp2;//一一对应
 7         vector<string>vs;
 8         int i;
 9         string s = "";
10         for (i = 0; i < str.size(); ++i) {
11             if (str[i] == ' ') {
12                 if (s != "")vs.push_back(s);
13                 s = "";
14             }
15             else s += str[i];
16         }
17         if (s != "")vs.push_back(s);//注意最后一个单词
18         if (pattern.size() != vs.size())return false;
19         for (i = 0; i < pattern.size(); ++i) {
20             cout << vs[i] << " ";
21             if (mp1.find(pattern[i]) != mp1.end()) {
22                 if (mp1[pattern[i]] != vs[i])return false;
23             }
24             else mp1[pattern[i]] = vs[i];
25             if (mp2.find(vs[i]) != mp2.end()) {
26                 if (mp2[vs[i]] != pattern[i])return false;
27             }
28             else mp2[vs[i]] = pattern[i];
29         }
30         return true;
31     }
32 };
原文地址:https://www.cnblogs.com/zhizhiyu/p/10176142.html