zoukankan      html  css  js  c++  java
  • 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;
            
        }
    };
  • 相关阅读:
    WPF数据绑定机制是如何实现
    C#自定义特性的使用
    MVVMLight学习笔记(一)---MVVMLight概述
    C# Autofac学习笔记
    EFCodeFirst快速搭建入门
    SQL having与where用法区别
    EventWaitHandle 类
    C# EF 使用 (CodeFirst模式)
    wmi 远程启动程序
    Centos 7 的一些 基础知识
  • 原文地址:https://www.cnblogs.com/yaoyudadudu/p/9411319.html
Copyright © 2011-2022 走看看