290. Word Pattern

来源:互联网 发布:psp 经典游戏 知乎 编辑:程序博客网 时间:2024/06/09 16:34

Given a pattern and a string str, find if str follows the same pattern.

Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str.

Examples:

  1. pattern = "abba", str = "dog cat cat dog" should return true.
  2. pattern = "abba", str = "dog cat cat fish" should return false.
  3. pattern = "aaaa", str = "dog cat cat dog" should return false.
  4. pattern = "abba", str = "dog dog dog dog" should return false.

Notes:
You may assume pattern contains only lowercase letters, and str contains lowercase letters separated by a single space.

题意:判断模型是否匹配。

思路:统一转换成中间的一种模型,进行匹配。

class Solution {public:bool wordPattern(string pattern, string str) {if (pattern.empty() && str.empty())return true;map<string, char> mymap;char* str_char = new char[str.size()];strcpy(str_char, str.c_str());char* p = strtok(str_char, " ");int index = 0;string str_tmp;while (p != NULL){string b(p);if (mymap.insert(pair<string, char>(b, 'a' + index)).second){str_tmp += ('a' + index);index++;}else{str_tmp += mymap[b];}p = strtok(NULL, " ");}string pattern_tmp = getIsomorphic(pattern);return !pattern_tmp.compare(str_tmp);}string getIsomorphic(string s){string s_num="";map<char, char> myMap;int val = 0;for (int i = 0; i < s.size(); i++){char ch = s[i];if (myMap.insert(pair<char, char>(ch, val+'a')).second){s_num += (val+'a');val++;}else{s_num += myMap[ch];}}return s_num;}};





0 0
原创粉丝点击