zoukankan      html  css  js  c++  java
  • LeetCode(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.

    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.

    分析

    字符串的模式匹配,类似于离散数学中的双向映射问题。

    利用unordered_map数据结构建立双向映射,逐个判断匹配。

    AC代码

    class Solution {
    public:
        bool wordPattern(string pattern, string str) {
            if (str.empty())
                return false;
    
            //从输入的字符串源串得到字符串数组
            vector<string> strs;
            string s = "";
            for (int i = 0; str[i] != ''; ++i)
            {
                if (str[i] == ' ')
                {
                    strs.push_back(s);
                    s = "";
                }
                else
                    s += str[i];
            }//for
            //保存末尾单词
            strs.push_back(s);
    
            if (pattern.size() != strs.size())
                return false;
            //判断模式匹配
            int len = pattern.size();
            unordered_map<char, string> um1;
            unordered_map<string, char> um2;
            for (int i = 0; i < len; ++i)
            {
                auto iter1 = um1.find(pattern[i]);
                auto iter2 = um2.find(strs[i]);
    
                if (iter1 != um1.end() && iter2 != um2.end())
                {
                    if ((*iter1).second == strs[i] && (*iter2).second == pattern[i])
                        continue;
                    else
                        return false;
                }//if
                else if (iter1 == um1.end() && iter2 != um2.end())
                    return false;
                else if (iter1 != um1.end() && iter2 == um2.end())
                    return false;
                else
                    um1.insert({ pattern[i], strs[i] });
                    um2.insert({ strs[i], pattern[i] });
            }//for
            return true;
        }
    };

    GitHub测试程序源码

  • 相关阅读:
    SpringMvc的服务器端跳转和客户端跳转
    springMvc的一些简介 和基于xml的handlerMapping基本流程
    springMvc 的参数验证 BindingResult result 的使用
    SpringMVC 学习笔记(二) @RequestMapping、@PathVariable等注解
    springmvc处理ajax请求
    取maven copy部分
    maven scope含义的说明
    Maven依赖中的scope详解
    EasyMock 使用方法与原理剖析
    Maven:Generating Project in Batch mode 卡住问题
  • 原文地址:https://www.cnblogs.com/shine-yr/p/5214747.html
Copyright © 2011-2022 走看看