Word Pattern

来源:互联网 发布:系统升级软件 编辑:程序博客网 时间:2024/04/29 18:44

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*,还是老实用数组吧。


0 0