Word Pattern
2016-06-10 10:47
225 查看
Word Pattern:
和之前的一篇博文一样,这道题主要是找双向映射关系,映射关系不对的就返回false。做这道题的时候在处理空格分隔的字符串上浪费了很多时间,在网上找到了一种很好地处理方法。(PS,处理字符串的循环用size()和i去遍历效果比迭代器遍历好一些)
class Solution {
public:
bool wordPattern(string pattern, string str) {
vector<string> dic;
istringstream sin(str);
string tmp;
while (sin >> tmp) dic.push_back(tmp);
if (dic.size() != pattern.size()) return false;
unordered_map<char, string> mp1;
unordered_map<string, char> mp2;
for (int i = 0; i < pattern.size(); ++i) {
if (mp1.find(pattern[i]) == mp1.end()) {
mp1[pattern[i]] = dic[i];
} else if (mp1[pattern[i]] != dic[i]) {
return false;
}
if (mp2.find(dic[i]) == mp2.end()) {
mp2[dic[i]] = pattern[i];
} else if (mp2[dic[i]] != pattern[i]) {
return false;
}
}
return true;
}
};istringstream对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开来。同时我又想到如果字符串是用其他符号分隔的怎么办 ,于是在网上找到了下面的方法:
int main()
{
int length ;
string st="Enter,the,name,of,an,existing,text,file:";
istringstream stream(st);
int i=0;
char array[20]={0};
while(stream.get(array,20,','))
{
length = stream.tellg();
cout<<array<<endl;
stream.seekg (length+1, ios::beg);
}
system("pause");
return 0;
}
但是我强迫症又犯了,静态数组看着好不舒服,所以想用vector.push_back(),然而stream.get的参数是string*,还是老实用数组吧。
和之前的一篇博文一样,这道题主要是找双向映射关系,映射关系不对的就返回false。做这道题的时候在处理空格分隔的字符串上浪费了很多时间,在网上找到了一种很好地处理方法。(PS,处理字符串的循环用size()和i去遍历效果比迭代器遍历好一些)
class Solution {
public:
bool wordPattern(string pattern, string str) {
vector<string> dic;
istringstream sin(str);
string tmp;
while (sin >> tmp) dic.push_back(tmp);
if (dic.size() != pattern.size()) return false;
unordered_map<char, string> mp1;
unordered_map<string, char> mp2;
for (int i = 0; i < pattern.size(); ++i) {
if (mp1.find(pattern[i]) == mp1.end()) {
mp1[pattern[i]] = dic[i];
} else if (mp1[pattern[i]] != dic[i]) {
return false;
}
if (mp2.find(dic[i]) == mp2.end()) {
mp2[dic[i]] = pattern[i];
} else if (mp2[dic[i]] != pattern[i]) {
return false;
}
}
return true;
}
};istringstream对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开来。同时我又想到如果字符串是用其他符号分隔的怎么办 ,于是在网上找到了下面的方法:
int main()
{
int length ;
string st="Enter,the,name,of,an,existing,text,file:";
istringstream stream(st);
int i=0;
char array[20]={0};
while(stream.get(array,20,','))
{
length = stream.tellg();
cout<<array<<endl;
stream.seekg (length+1, ios::beg);
}
system("pause");
return 0;
}
但是我强迫症又犯了,静态数组看着好不舒服,所以想用vector.push_back(),然而stream.get的参数是string*,还是老实用数组吧。
相关文章推荐
- 【CSS笔记一】开始学习CSS,为网页添加样式
- C++第二次上机实验-学生成绩
- shell--赋值,判断,循环
- 程序员应该阅读的10本经典书籍
- 用Toolkit来获取Image图像
- HDU4337(哈密顿回路)
- mac 单机 搭建 eclipse spark开发环境
- 27. Remove Element
- [POJ 3666] Making the Grade (序列DP+离散化)
- 如何设置在一个Label上显示不同颜色的text
- 【HTML】小练习,复习巩固
- va_start和va_end使用详解
- JavaScript中清空数组的三种方式
- 大明A+B
- iOS-UIViewController的生命周期
- POJ_3630_Phone List_Trie树
- Java学习笔记——String类及其常见功能(13)
- ecshop调用指定分类的文章的方法介绍
- Log4j – 如何配置多个logger?
- Java中如何监测两个物体是否碰撞?