leetcode 290. Word Pattern

来源:互联网 发布:软件工程项目案例 编辑:程序博客网 时间:2024/06/05 05:46

解题思路:
同时遍历pattern和str,观察字符与对应单词的数量是否一直保持一致。
pattern的字母数量与Word的单词数量不一致时,返回false

原题目:

Given a pattern and a string str, find if str follows 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.

AC解,C++代码,菜鸟一个,请大家多多指正

class Solution {public:    bool wordPattern(string pattern, string str) {        map<char, vector<string::size_type>> pmap;        map<string, vector<string::size_type>> smap;        int word_count = 0;        string::size_type str_ix = 0;        string word;        for (string::size_type pix = 0; pix != pattern.size(); pix++) {            pmap[pattern[pix]].push_back(pix);            word.clear();            while (str_ix != str.size() && str[str_ix] != ' ') {                word += str[str_ix];                str_ix++;            }            smap[word].push_back(word_count);            word_count++;            if (pmap[pattern[pix]] != smap[word]) {                return false;            }            if (str_ix != str.size()) {                str_ix++;            }            else {                break;            }        }        if (str_ix != str.size() || word_count != pattern.size()) {            return false;        }        return true;    }};
0 0