Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
leetcode刷题290单词规律
前文
本题目为leetcode字符串处理类型题目,题目序号为290.主要考察对字符串处理的知识,题目链接https://leetcode-cn.com/problems/word-pattern/。
题目信息
给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
解题思路
本题目为字符串处理类型的题目。根据题目信息可知,与其说找字符串之间的规律,不如直接概括为寻找字符串之间的映射。这么说自然很容易会想到利用map完成该题目的解答。对于两个目标字符串,其中一个转化为数组,利用空格分割。而另一个直接利用字符串中每位元素进行映射即可。此时,我们相当于已经得到了两种数组。下一步需要做的是利用map进行映射,该映射比较容易忽视的是需要做成双向映射,即使用两个map数据结构。按此方式循环操作后,即可得到我们的目标答案,至此,题目解答完毕。
解题代码
public boolean wordPattern(String pattern, String s) {
String[] strs = s.split(" ");
if(pattern.length() != strs.length){
return false;
}
HashMap<String,String> map = new HashMap<>();
HashMap<String,String> mapReverse = new HashMap<>();
for (int i = 0; i < strs.length; i++) {
if(map.containsKey(String.valueOf(pattern.charAt(i)))){
if(!map.get(String.valueOf(pattern.charAt(i))).equals(strs[i])){
return false;
}
}else{
map.put(String.valueOf(pattern.charAt(i)),strs[i]);
}
if(mapReverse.containsKey(strs[i])){
if(!mapReverse.get(strs[i]).equals(String.valueOf(pattern.charAt(i)))){
return false;
}
}else{
mapReverse.put(strs[i],String.valueOf(pattern.charAt(i)));
}
}
return true;
}
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。