关于LeetCode中Word Pattern一题的理解
来源:互联网 发布:rayfile软件官网 编辑:程序博客网 时间:2024/06/08 09:28
题目如下:
Given a pattern
and a stringstr
, find ifstr
follows the same pattern.
Here follow means a full match, such that there is a bijection between a letter inpattern
and a non-empty word instr
.
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.
public boolean wordPattern(String pattern, String str) { String[] origin = str.split(" "); if(pattern.length() != origin.length){ return false; }else{ int mod_length = pattern.length(); int[] mod = new int[mod_length]; int[] mod2 = new int[mod_length]; HashMap<String,Integer> comparedMap = new HashMap<String,Integer>(); HashMap<String,Integer> comparedMap2 = new HashMap<String,Integer>(); for(int i=0;i<mod_length;i++){ String pattern_char = pattern.charAt(i)+""; String origin_char = origin[i]; if(!comparedMap.containsKey(pattern_char)){ comparedMap.put(pattern_char,i); mod[i] = i; }else{ mod[i] = comparedMap.get(pattern_char).intValue(); } if(!comparedMap2.containsKey(origin_char)){ comparedMap2.put(origin_char,i); mod2[i] = i; }else{ mod2[i] = comparedMap2.get(origin_char).intValue(); } if(mod[i]!=mod2[i]){ return false; } } return true; } }然后再来看一下讨论区的回答,首先是下面的解决方案,非常简练,这个代码的解释在这里:https://discuss.leetcode.com/topic/26339/8-lines-simple-java
public boolean wordPattern(String pattern, String str) { String[] words = str.split(" "); if (words.length != pattern.length()) return false; Map index = new HashMap(); for (Integer i=0; i<words.length; ++i) if (index.put(pattern.charAt(i), i) != index.put(words[i], i)) return false; return true; }然后是一种常规使用HashMap的方法,还是挺有意思的。首先,如果map中包含key值,我们就判断当前输入的pattern的第i位字符在map中对应的value值和arr[i]相不相等,如果不相等就说明不对应,应当返回false;如果map中未包含该key值,我们就判断map中是否包含值为arr[i]的value值,如果包含说明已经存在一个key与之对应,但是这个key和现在输入的pattern的第i个字符代表的key不是同一个key,说明同一个value值对应了两个不同的key值,说明不对应,返回false。代码如下所示:
public boolean wordPattern(String pattern, String str) { String[] arr= str.split(" "); HashMap<Character, String> map = new HashMap<Character, String>(); if(arr.length!= pattern.length()) return false; for(int i=0; i<arr.length; i++){ char c = pattern.charAt(i); if(map.containsKey(c)){ if(!map.get(c).equals(arr[i])) return false; }else{ if(map.containsValue(arr[i])) return false; map.put(c, arr[i]); } } return true; }基本就是这些方法了,今天感觉诸事不顺,感觉身体被掏空,托福复习的像坨shit,FXXK 。
1 0
- 关于LeetCode中Word Pattern一题的理解
- 关于Leetcode中sum of integers一题的理解
- 关于Leetcode中Same Tree一题的理解
- 关于LeetCode中Power of Two一题的理解
- 关于LeetCode中Reverse String一题的理解
- 关于LeetCode中Valid Anagram一题的理解
- 关于LeetCode中Palindrome Number一题的理解
- 关于LeetCode中Invert Binary Tree一题的理解
- 关于LeetCode中Reverse Integer一题的理解
- 关于LeetCode中Ransom Note一题的理解
- 关于LeetCode中Find the Difference一题的理解
- 关于LeetCode中Valid Palindrome一题的理解
- 关于LeetCode中Remove Element一题的理解
- 关于LeetCode中Symmetric Tree一题的理解
- 关于LeetCode中Palindrome Linked List一题的理解
- 关于LeetCode中Longest Common Prefix一题的理解
- 关于LeetCode中Rectangle Area一题的理解
- 关于LeetCode中Factorial Trailing Zeroes一题的理解
- Android中两种请求方式HttpGet和HttpPost验证用户登录
- 计算鼠标移动的精确速度
- C++:多线程编程学习:利用多线程进行归并排序。
- MenDeley
- Maven的安装和Eclipse集成
- 关于LeetCode中Word Pattern一题的理解
- JAVA多线程实现和应用总结
- 编写接口事例
- 项目2-程序的多文件组织
- react flux
- 第三章 JAVA集合之ArrayList源码浅析
- NYOJ 36 最长公共子序列 (LCS模板)
- hbase bulkload 实例
- C语言之函数sscanf()的用法