Word Pattern II

原创 2015年11月19日 13:54:33

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-emptysubstring 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.

没交会员,题目被锁了。所以懒得自己写。代码摘自:https://leetcode.com/discuss/63252/share-my-java-backtracking-solution

public class Solution {

  public boolean wordPatternMatch(String pattern, String str) {
    Map<Character, String> map = new HashMap<>();
    Set<String> set = new HashSet<>();

    return isMatch(str, 0, pattern, 0, map, set);
  }

  boolean isMatch(String str, int i, String pat, int j, Map<Character, String> map, Set<String> set) {
    // base case
    if (i == str.length() && j == pat.length()) return true;
    if (i == str.length() || j == pat.length()) return false;

    // get current pattern character
    char c = pat.charAt(j);

    // if the pattern character exists
    if (map.containsKey(c)) {
      String s = map.get(c);

      // then check if we can use it to match str[i...i+s.length()]
      if (!str.startsWith(s, i)) {
        return false;
      }

      // if it can match, great, continue to match the rest
      return isMatch(str, i + s.length(), pat, j + 1, map, set);
    }

    // pattern character does not exist in the map
    for (int k = i; k < str.length(); k++) {
      String p = str.substring(i, k + 1);

      if (set.contains(p)) {
        continue;
      }

      // create or update it
      map.put(c, p);
      set.add(p);

      // continue to match the rest
      if (isMatch(str, k + 1, pat, j + 1, map, set)) {
        return true;
      }

      // backtracking
      map.remove(c);
      set.remove(p);
    }

    // we've tried our best but still no luck
    return false;
  }

}


[leetcode] 291. Word Pattern II 解题报告

题目链接: https://leetcode.com/problems/word-pattern-ii/ Given a pattern and a string str, find i...
  • qq508618087
  • qq508618087
  • 2016年06月24日 04:20
  • 1723

140. Word Break II(dp,字典匹配,并输出所有匹配结果,即保存dp路径)(继续理解,重刷)

Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each ...
  • acm_1361677193
  • acm_1361677193
  • 2016年10月01日 15:07
  • 154

Java学习笔记之Pattern类的用法详解(正则表达式)

java.util.regex.Pattern (摘自sun主页) Implements:Serializable   正则表达式的编译表示形式。 指定为字符串的正则表达式必须首...
  • WuGee2015
  • WuGee2015
  • 2015年09月05日 18:38
  • 1332

java pattern类使用说明(正则表达式)

java.util.regex 类 Pattern java.lang.Object java.util.regex.Pattern 所有已实现的接口: Serializable pu...
  • MINEZHANGHAO
  • MINEZHANGHAO
  • 2013年11月05日 09:38
  • 4386

java Pattern类中关于匹配group和group(int group)的一些学习

看了我们组小伙伴的日志,对于Matcher的group()和group(int group),似乎有的还不是分的很清楚,在此给大家解释一下: 1,方法介绍: (1)group()返回的是该次匹配的...
  • xhrno13
  • xhrno13
  • 2014年07月09日 11:01
  • 625

Java中正则表达式及Pattern和Matcher类详解

Java中正则表达式及Pattern和Matcher类详解 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是...
  • u013309870
  • u013309870
  • 2016年07月29日 23:17
  • 866

【LeetCode-面试算法经典-Java实现】【119-Pascal's Triangle II(帕斯卡三角形(杨辉三角)II)】

【119-Pascal’s Triangle II(帕斯卡三角形II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given an index k, return t...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月13日 06:21
  • 2341

JAVA设计模式之 简单工厂模式【Simple Factory Pattern】

一、概述 er、适用场景
  • l416112167
  • l416112167
  • 2014年10月18日 21:48
  • 2593

java中使用Pattern类中和Matcher类进行查找和替换,你会吗?

无论是哪一门语言,我们总会用到正则表达式来进行字符串的查找和替换。Java中也不为过,我曾经写过一个网页---正则表达式在线测试。那时候,我还没有开始学习Java,不知道Java支持正则表达式,所以我...
  • XIAXIA__
  • XIAXIA__
  • 2014年12月06日 19:02
  • 5326

【LeetCode-面试算法经典-Java实现】【219-Contains Duplicate II(包含重复元素II)】

【219-Contains Duplicate II(包含重复元素II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github.com/Wang-...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月29日 06:36
  • 3281
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Word Pattern II
举报原因:
原因补充:

(最多只允许输入30个字)