leetcode Pattern

来源:互联网 发布:p2p网络借贷黑名单 编辑:程序博客网 时间:2024/04/29 21:23

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:
pattern = "abba", str = "dog cat cat dog" should return true.
pattern = "abba", str = "dog cat cat fish" should return false.
pattern = "aaaa", str = "dog cat cat dog" should return false.
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.

这里主要是字符与字符串对应映射问题,首先将有空格分开的字符串用一个vector<string>容器存储,对应与字符存储的pattern=n,然后利用C++映射容器map,涉及的主要有:

1.string &append(int n,char c);        //在当前字符串结尾添加n个字符c

2.vector的push_back操作;

3.map<key,key_value>里find()函数返回一个迭代器指向键值为key的元素key_value,如果没找到就返回指向map尾部的迭代器

class Solution {public:   bool wordPattern(string pattern, string str) {  map<char ,string>Map1;  map<string,char>Map2;  vector<string>::iterator p;  string temp("");  vector<string> vec;  int l=str.length();  int i;  for(i=0;i<l;i++){  if(str.at(i)==' '){vec.push_back(temp);temp="";continue;}  else {temp.append(1,str.at(i));}  }  if(i==l)vec.push_back(temp); // for(p=vec.begin();p!=vec.end();p++){cout<<*p<<" ";}  int n=pattern.length();  if(n!=vec.size())return 0;  for(i=0;i<n;i++)  {if(Map1.find(pattern[i])==Map1.end()&&Map2.find(vec[i])==Map2.end())     {Map1.insert(pair<char,string>(pattern[i],vec[i]));      Map2.insert(pair<string,char>(vec[i],pattern[i]));  }  else if(Map1[pattern[i]]!=vec[i]||Map2[vec[i]]!=pattern[i])return 0;  }  return 1;    }};


 

0 0