• 290. Word Pattern


    问题描述:

    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.

    Example 1:

    Input: pattern = "abba", str = "dog cat cat dog"
    Output: true

    Example 2:

    Input:pattern = "abba", str = "dog cat cat fish"
    Output: false

    Example 3:

    Input: pattern = "aaaa", str = "dog cat cat dog"
    Output: false

    Example 4:

    Input: pattern = "abba", str = "dog dog dog dog"
    Output: false

    Notes:
    You may assume pattern contains only lowercase letters, and str contains lowercase letters separated by a single space.

    解题思路:

    这道题要求我们求句子是否满足pattern。

    有两个输入:pattern 和 str,其中pattern以字符为单位,str以单词为单位。

    若两个输入的单位长度不相同,则一定不匹配。

    其中不相同有两种可能:

      1. pattern 长,str短

      2.pattern 短,str长

    我决定使用stringstream来读取str中的单词。

    在读取是用i来标记单词的下标同时访问pattern中的字符。

    用两个map来存储,这里认为char和word是一一对应的。

    首先检查i是否超出pattern的长度,然后检查当前单词是否有代表的字符出现:

      1.若有,则需要比较是否相同。不相同则返回false

      2.若没有,则需要查询当前字母是否代表了其他单词。若代表其他单词,则需要返回false

    否则将这个字母和单词的对应加入map

    注意在最后的时候检查i == pattern.size(),若不等于则说明pattern过长

    代码:

    class Solution {
    public:
        bool wordPattern(string pattern, string str) {
            unordered_map<string, char> m;
            unordered_map<char, string> p;
            
            stringstream ss(str);
            string tmp;
            int i = 0;
            while(getline(ss, tmp, ' ')){
                if(i >= pattern.size()) return false;
                if(m.count(tmp) != 0){
                    if(m[tmp] != pattern[i]) return false;
                }else{
                    if(p.count(pattern[i]) != 0) return false;
                    m[tmp] = pattern[i];
                    p[pattern[i]] = tmp;
                }
                i++;
            }
            if(i < pattern.size()) return false;
            return true;
            
        }
    };
  • 相关阅读:
    html页面中的转意字符
    bootstrap学习笔记3- navbar-header navbar-toggle 类 data-toggle和data-target
    DIV嵌套过程中的高度自适应问题
    <span class="icon-bar"></span> 不显示?
    CSS中定位的浮动float
    CSS 盒模型,块级元素和行内元素的区别和特性
    CSS padding
    CSS Position(定位)
    网络资料
    vue中 具名插槽+作用域插槽的混合使用
  • 原文地址:https://www.cnblogs.com/yaoyudadudu/p/9411319.html
Copyright © 2020-2023  润新知