博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[leetcode] 291. Word Pattern II 解题报告
阅读量:3674 次
发布时间:2019-05-21

本文共 1663 字,大约阅读时间需要 5 分钟。

题目链接: https://leetcode.com/problems/word-pattern-ii/

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 substring in str.

Examples:

  1. pattern = "abab", str = "redblueredblue" should return true.
  2. pattern = "aaaa", str = "asdasdasdasd" should return true.
  3. pattern = "aabb", str = "xyzabcxzyabc" should return false.

Notes:
You may assume both pattern and str contains only lowercase letters.

思路: 也是很烦的一题. 基本思路是对于pattern字符串来说, 一个字符对应一个字符串, 而对于str来说一个子串对应一个字符. 他们是一一对应的, 因此可以设置两个hash表来映射他们的对应关系. 然后用DFS来搜索对应关系. 一个需要注意的是当回溯的时候如果从当前的字符-字符串的对应开始搜索无法得到正确答案, 不一定要删除他们的对应关系, 因为在之前他们可能是对应的, 如果此时删除了之前的映射虽然实际存在, 但在hash表中已经没有了记录.

代码如下:

class Solution {public:    bool DFS(string& p, int k, string& str, int len)    {        int pLen = p.size(), sLen = str.size();        if(pLen== k && sLen==0)  return true;        if(pLen-k > sLen || pLen == k || sLen==0 || len> sLen) return false;        if(DFS(p, k, str, len+1)) return true;        string left = str.substr(0, len), right = str.substr(len);        int flag = hash1.count(p[k]);        if(hash1.count(p[k]) && hash1[p[k]] != left) return false;        if(hash2.count(left) && hash2[left] != p[k]) return false;        hash1[p[k]] = left, hash2[left] = p[k];        if(DFS(p, k+1, right, 1)) return true;        if(hash1.count(p[k]) != flag)             hash1.erase(p[k]), hash2.erase(left);        return false;    }        bool wordPatternMatch(string pattern, string str) {        return DFS(pattern, 0, str, 1);    }private:    unordered_map
hash1; unordered_map
hash2;};

转载地址:http://kglbn.baihongyu.com/

你可能感兴趣的文章
MongoDbRepository的常用AP操作和易错点
查看>>
MongDBRepository和MongDBOperator和MongTemplate的方法比较
查看>>
IntelliJ IDEA中关于Maven构建复杂的聚合工程的管理和打包问题
查看>>
错误记录关于Model 的Not a managed type: class,无法找到Model
查看>>
关于JPA中Specification接口的问题,记录一下
查看>>
IntelliJ IDEA中GIT,已经 commit and push成功,但并未 push 到远程库的问题
查看>>
关于光盘刻录,重洗的一些知识
查看>>
default_Keyword
查看>>
do_Keyword
查看>>
for_Keyword
查看>>
float_Keyword
查看>>
finally_Keyword
查看>>
final_Keyword
查看>>
enum_Keyword
查看>>
extends_Keyword
查看>>
if_Keyword
查看>>
implements_Keyword
查看>>
import_Keyword
查看>>
int_Keyword
查看>>
超详细解读:神经语义解析的结构化表示学习 | 附代码分析
查看>>