【LeetCode】290. Word Pattern
2016-05-14 10:52
441 查看
题目
Given a pattern and a stringstr, find if
strfollows 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.
思路
最开始的思路是建立两个map,一个从char映射到string,一个从string映射到char。比较好的思路是保存一个相同的值,在这个题中就是出现的位置+1。+1的作用是避免0的干扰,因为map默认值就是0。代码
class Solution { public: bool wordPattern(string pattern, string str) { unordered_map<char,int> p2i; unordered_map<string,int> s2i; istringstream ss(str); int i=0,n=pattern.size(); for (string word;ss>>word;++i){ if (i==n || p2i[pattern[i]]!=s2i[word]) return false; p2i[pattern[i]]=s2i[word]=i+1; } return i==n; } };
字符串处理小技巧
此题中string中有空格,而c++中没有很方便的split函数,所以使用istringstream来处理string输入流。注意在平常使用时要包含头文件include <sstream>
转载请声明原文地址
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- 关于指针的一些事情
- android上改变listView的选中颜色
- String.intern
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- PostgreSQL ERROR: invalid escape string 解决办法
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析