zoukankan      html  css  js  c++  java
  • 2020-12-16 单词规律

    题目


    解法

    在这道题中,模式(pat)与单词(word)必须是1-1对应的关系,因此可使用两个哈希表来存储映射关系,若双方不匹配便返回false;如果pat的个数与word的个数不相等,也返回flase。

    class Solution {
    public:
        bool wordPattern(string pattern, string s) {
            unordered_map<char, string> ch_str_map;
            unordered_map<string, char> str_ch_map;
            int j  = 0;
            bool isOver = false;
            for (int i = 0; i < pattern.size(); i++) {
                auto pat_it = ch_str_map.find(pattern[i]);
                string word = readNextWord(s, j, isOver);
    
                if (isOver) {   // word已经提取完成
                    if (i+1 < pattern.size()) { // 模式多余
                        return false;
                    }
                }
                if (pat_it == ch_str_map.end()) {   // 该模式还未加入map中
                    if (str_ch_map.find(word) == str_ch_map.end()){     // 该word没有加入map中
                        if (word != ""){    // 返回的为非空串
                            ch_str_map.insert(pair<char, string>(pattern[i], word));
                            str_ch_map.insert(pair<string, char>(word, pattern[i]));
                        }
                    } else {    // 两个模式映射为同一个word,不可取
                        return false;
                    }
                } else {    // 若该模式已加入map
                    if (pat_it->second != word) {   // 模式不匹配
                        return false;
                    }
                }
            }
    
            if (j < s.size()) {
                return false;
            }
    
            return true;
        }
    
        string (string &s, int &j, bool &isOver) {
            string word = "";
            while (j < s.size() && s[j] != ' ') {
                word += s[j++];
            }
            if (j >= s.size()) {
                isOver = true;
            }
    
            ++j;
            return word;
        }
    };
    

    提交结果


    总结

    今天的题目比较简单,思路也很快就出来了,但是在一些小细节的地方总抓不住,老是忽略某些可能特殊输入,程序鲁棒性不够;另一个问题是对STL的使用不熟练以及代码习惯等原因,同样的功能,我的代码远比Leetecode官方的代码冗长。此二点值得注意。

    CS专业在读,热爱编程。
    专业之外,喜欢阅读,尤爱哲学、金庸、马尔克斯。
  • 相关阅读:
    sed 练习
    正则表达式
    字符转换命令
    命令执行判断依据
    shell 操作环境
    选取命令
    排序命令
    命令别名与历史命令
    变量的学习
    防止恶意跳转
  • 原文地址:https://www.cnblogs.com/jmhwsrr/p/14145999.html
Copyright © 2011-2022 走看看