leetcode Pattern

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;
    }
};


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值