您的位置:首页 > 其它

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*,还是老实用数组吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: