LeetCode290_290. 单词规律
一、描述
给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern = "abba", s = "dog cat cat dog"
输出: true
示例 2:
输入:pattern = "abba", s = "dog cat cat fish"
输出: false
示例 3:
输入: pattern = "aaaa", s = "dog cat cat dog"
输出: false
提示:
1 <= pattern.length <= 300
pattern 只包含小写英文字母
1 <= s.length <= 3000
s 只包含小写英文字母和 ’ ’
s 不包含 任何前导或尾随对空格
s 中每个单词都被 单个空格 分隔
二、题解
方法一:
1、将str按照空格切分,首先判断切分后的长度是否和pattern的长度一样,不一样直接返回false。
2、定义一个map判断一个key对应多个value的情况。
3、定义一个list判断多个key对应一个value的情况。
/**
* 290. Word Pattern
* 题意:字样,类似于同性异构体
* 思路: 1、将str按照空格切分,首先判断切分后的长度是否和pattern的长度一样,不一样直接返回false。
* 2、定义一个map判断一个key对应多个value的情况。
* 3、定义一个list判断多个key对应一个value的情况。
*/
//AC Your runtime beats 25.66 % of java submissions.
//33 / 33 test cases passed. Status: Accepted Runtime: 3 ms
public boolean wordPattern(String pattern, String str) {
boolean res = true;
//map判断一个key对应多个value的情况
Map<Character, String> map = new HashMap<Character, String>();
String[] strs = str.split(" ");
if (strs.length != pattern.length()) {
return false;
}
for (int i = 0; i < strs.length; i++) {
if (!map.containsKey(pattern.charAt(i))) {
map.put(pattern.charAt(i), strs[i]);
} else {
if (!map.get(pattern.charAt(i)).equals(strs[i])) {
res = false;
}
}
}
//定义一个list,通过list和map的大小来判断多个key对应一个value的情况
List<String> list = new ArrayList<String>();
for (Character key : map.keySet()) {
if (!list.contains(map.get(key))) {
list.add(map.get(key));
}
}
if (list.size() != map.size()) {
res = false;
}
return res;
}
LeetCode 231. 2 的幂
LeetCode 234. 回文链表
LeetCode 237. 删除链表中的节点
LeetCode 242. 有效的字母异位词
LeetCode 257. 二叉树的所有路径
LeetCode 258. 各位相加
LeetCode 263. 丑数
LeetCode 268. 丢失的数字
LeetCode 283. 移动零
LeetCode 287. 寻找重复数
LeetCode 290. 单词规律
LeetCode 292. Nim 游戏
声明:
题目版权为原作者所有。文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。
By luoyepiaoxue2014
B站: https://space.bilibili.com/1523287361 点击打开链接
微博: http://weibo.com/luoyepiaoxue2014 点击打开链接