<LeetCode OJ> 290. Word Pattern
来源:互联网 发布:英汉翻译软件语音 编辑:程序博客网 时间:2024/06/14 01:04
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.
分析:
首先提取str = "dog cat cat dog"为,vecstr={"dog","cat","cat","dog"}
接着利用哈希map(unordered_map)建立对应关系,以下面这个测试案例为例
"abba"
"dog dog dog dog",应该返回false
建立对应正序关系1:通过判断已经被插入mapping1的元素是否矛盾来
mapping1['a']="dog",mapping1['b']="dog",mapping1['b']="dog",mapping1['a']="dog"
能通过测试,因为'a','b'对应的实值的确是"dog"
建立对应反序关系2:通过判断已经被插入mapping2的元素是否矛盾来
mapping2["dog"]='a',mapping2["dog"]='b',mapping2["dog"]='b',mapping2["dog"]='a'
不能通过测试,因为"dog"对应的实值是'a'不能'b',这里显然矛盾了
这位小伙伴尽然做的和我一样:http://blog.csdn.net/booirror/article/details/50084075
class Solution {public: bool wordPattern(string pattern, string str) { //提取str = "dog cat cat dog"为,"dog","cat","cat","dog" vector<string> vecstr; int beginpos=0,endpos=0; while( endpos < str.size() ) { while(endpos < str.size()&& str[endpos]!=' ') endpos++; string sub=str.substr(beginpos,endpos-beginpos); vecstr.push_back(sub); beginpos=++endpos; } if(vecstr.size()!=pattern.size()) return false; unordered_map<char,string> mapping1; unordered_map<string,char> mapping2; for(int i=0;i<pattern.size();i++) { if(mapping1.find(pattern[i])==mapping1.end())//正序判断 mapping1[pattern[i]]=vecstr[i]; else{ if(mapping1[pattern[i]]!=vecstr[i]) return false; } if(mapping2.find(vecstr[i])==mapping2.end())//逆序判断 mapping2[vecstr[i]]=pattern[i]; else{ if(mapping2[vecstr[i]]!=pattern[i]) return false; } } return true; }};
注:本博文为EbowTang原创,后续可能继续更新本文。如果转载,请务必复制本条信息!
原文地址:http://blog.csdn.net/ebowtang/article/details/50651635
原作者博客:http://blog.csdn.net/ebowtang
- <LeetCode OJ> 290. Word Pattern
- LeetCode Oj 290. Word Pattern
- 【leetcode】290. Word Pattern
- 【leetcode】290. Word Pattern
- 290. Word Pattern LeetCode
- Leetcode 290. Word Pattern
- 【LeetCode】290. Word Pattern
- LeetCode-290. Word Pattern
- LeetCode *** 290. Word Pattern
- leetcode 290. Word Pattern
- LeetCode 290. Word Pattern
- LeetCode 290. Word Pattern
- [leetcode] 290. Word Pattern
- 【LeetCode】290. Word Pattern
- LeetCode-290.Word Pattern
- Leetcode 290. Word Pattern
- leetcode:290. Word Pattern
- 290.[Leetcode]Word Pattern
- 学业众筹,为着闪亮的日子
- Java的多线程之同步篇二:synchronized关键字
- docker 学习笔记 -----如何批量删除的已经处于停止状态的容器
- Linux进程共享通信 -- mmap实现
- BZOJ1117 POI2009 救火站
- <LeetCode OJ> 290. Word Pattern
- Linux服务管理命令
- C语言连接mysql数据库查询中文的数据表乱码问题
- Volley get请求上传中文参数,后台接收到的是乱码的解决办法
- 1. 判断用户输入是否符合预期的循环
- Java学习笔记5-泛型
- Qt多线程事件管理的正确打开方式
- Linux 网络命令集锦
- 把cocos2dx 2.2的项目移植到 cocos2dx 3.8