<LeetCode OJ> 290. Word Pattern
2016-02-11 18:09
369 查看
290. Word Pattern
My SubmissionsQuestion
Total Accepted: 24989 Total
Submissions: 89440 Difficulty: Easy
Given a
patternand a string
str,
find if
strfollows the same pattern.
Here follow means a full match, such that there is a bijection between a letter in
patternand
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
patterncontains only lowercase letters, and
strcontains
lowercase letters separated by a single space.
Credits:
Special thanks to @minglotus6 for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
Hide Tags
Hash Table
Show Similar Problems
分析:
首先提取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"]="dog",mapping2["dog"]="dog",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
相关文章推荐
- Linux 网络命令集锦
- C语言连接mysql数据库查询中文的数据表乱码问题
- 1. 判断用户输入是否符合预期的循环
- Java学习笔记5-泛型
- Linux安装Mongodb和Mongodb基本操作
- Volley get请求上传中文参数,后台接收到的是乱码的解决办法
- Linux服务管理命令
- ThinkPHP - 独立分组项目搭建
- 使用开源的PullToRefreshScrollView scrollTo和scrollby遇到的问题
- BZOJ1117 POI2009 救火站
- Linux进程共享通信 -- mmap实现
- TCP的三次握手与四次握手过程及状态转换
- 学业众筹,为着闪亮的日子
- 架构设计三部曲之如何评审架构设计说明书
- Light OJ 1122 Digit Count (简单数位DP)
- rquest.getRemoteAddr()获取的值为0:0:0:0:0:0:0:1
- fragment的使用
- 在eclipese中编写servlet时出现“The import javax.servlet cannot be resolved”
- javabean技术
- linux下搭建vsftp服务