291. Word Pattern II
2015-12-13 06:30
459 查看
题目:
Given a
Here follow means a full match, such that there is a bijection between a letter in
Examples:
pattern =
pattern =
pattern =
Notes:
You may assume both
链接: http://leetcode.com/problems/word-pattern-ii/
题解:
题目跟Word Pattern基本一样,但输入str里面没有delimiter,所以我们要使用Backtracking来做。因为上一题使用了两个map,所以这一题延续使用,结果给自己造成了很大的困难,代码也写的长而难懂。二刷一定要好好研究backtracking,争取也写出简洁漂亮的代码。
Time Complexity - O(2n), Space Complexity - O(2n)
Reference:
https://leetcode.com/discuss/63252/share-my-java-backtracking-solution https://leetcode.com/discuss/63393/20-lines-java-clean-solution-easy-to-understand https://leetcode.com/discuss/63583/20-lines-concise-java-solution-with-explanation https://leetcode.com/discuss/63724/super-easy-understand-backtracking-java-solution
Given a
patternand a string
str, find if
strfollows the same pattern.
Here follow means a full match, such that there is a bijection between a letter in
patternand a non-empty substring in
str.
Examples:
pattern =
"abab", str =
"redblueredblue"should return true.
pattern =
"aaaa", str =
"asdasdasdasd"should return true.
pattern =
"aabb", str =
"xyzabcxzyabc"should return false.
Notes:
You may assume both
patternand
strcontains only lowercase letters.
链接: http://leetcode.com/problems/word-pattern-ii/
题解:
题目跟Word Pattern基本一样,但输入str里面没有delimiter,所以我们要使用Backtracking来做。因为上一题使用了两个map,所以这一题延续使用,结果给自己造成了很大的困难,代码也写的长而难懂。二刷一定要好好研究backtracking,争取也写出简洁漂亮的代码。
Time Complexity - O(2n), Space Complexity - O(2n)
public class Solution { public boolean wordPatternMatch(String pattern, String str) { if(pattern.length() == 0 && str.length() == 0) { return true; } if(pattern.length() == 0 || str.length() == 0) { return false; } Map<Character, String> patternToStr = new HashMap<>(); Map<String, Character> strToPattern = new HashMap<>(); return wordPatternMatch(pattern, str, patternToStr, strToPattern, 0, 0); } private boolean wordPatternMatch(String pattern, String str, Map<Character, String> patternToStr, Map<String, Character> strToPattern, int posPattern, int posString) { if(posPattern == pattern.length()) { return true; } if(str.length() == 0 && posPattern < pattern.length()) { return false; } int i = 0; for(i = posString; i < str.length(); i++) { String word = str.substring(posString, i + 1); if(posPattern >= pattern.length()) { return false; } char c = pattern.charAt(posPattern); if(!patternToStr.containsKey(c) && !strToPattern.containsKey(word)) { patternToStr.put(c, word); strToPattern.put(word, c); if(wordPatternMatch(pattern, str.substring(i + 1), patternToStr, strToPattern, posPattern + 1, 0)) { return true; } patternToStr.remove(c); strToPattern.remove(word); } else if(patternToStr.containsKey(c) && !word.equals(patternToStr.get(c))) { if(word.length() == patternToStr.get(c).length()) { return false; } } else if(strToPattern.containsKey(word) && c != strToPattern.get(word)) { } else { posPattern++; posString += word.length(); } } return posPattern == pattern.length() ? true: false; } }
Reference:
https://leetcode.com/discuss/63252/share-my-java-backtracking-solution https://leetcode.com/discuss/63393/20-lines-java-clean-solution-easy-to-understand https://leetcode.com/discuss/63583/20-lines-concise-java-solution-with-explanation https://leetcode.com/discuss/63724/super-easy-understand-backtracking-java-solution
相关文章推荐
- Codeforces 602B
- 查看动态链接库中函数参数类型
- 【转】JDK工具jinfo用法详解
- VS2010 + QT5.2+ QT-VS-Addin1.2.2开发环境配置
- [MetaHook] Event Hook
- 蓝桥杯预选反思
- BugPhobia开发篇章:Beta阶段第I次Scrum Meeting
- 【转】JVM统计监控工具-jstat
- 【转】jps命令使用
- 软件工程中扇入fan-in和扇出fan-out
- C#实现中国天气网JSON接口测试
- POJ 1797 Heavy Transportation 【dijkstra】
- 对话框的按键处理 PreTranslateMessage、OnKeyDown和OnChar
- 能影响很多人的不一定是好人,但一定是有能力的人
- centos7与window10与window7三系统启动修改grup.cfg的方法
- Oracle查询重复数据并删除,只保留一条记录
- gitlab和sourcetree的使用的一些问题
- OpenGL ES 学习教程(七) 亮瞎狗眼的 Specular Lighting 镜面高光
- HDOJ 5597 GTW likes function(规律+欧拉函数)
- array new 与 array deletedelete