一、题目
1、题目描述
给定一种规律 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
2、基础框架
- C++版本给出的基础框架如下:
3、原题链接
https://leetcode.cn/problems/word-pattern/
二、解题报告
1、思路分析
(
1
)
(1)
(1)用两个Map容器分别记录pattern字符和s中单词的对应关系。
(
2
)
(2)
(2)如果不相同则返回false.
2、时间复杂度
时间复杂度O(n),空间复杂度O(n)
3、代码详解
class Solution {
public boolean wordPattern(String pattern, String s) {
String[] ss = s.split(" ");
if (pattern.length() != ss.length) return false;
Map<Character, String> mp = new HashMap<>();
Map<String, Character> mp2 = new HashMap<>();
for (int i = 0; i < pattern.length(); i++) {
if (!mp.containsKey(pattern.charAt(i))) {
if (mp2.containsKey(ss[i]))return false;
mp.put(pattern.charAt(i), ss[i]);
mp2.put(ss[i], pattern.charAt(i));
}
else {
if(!mp.get(pattern.charAt(i)).equals(ss[i])) return false;
}
}
return true;
}
}
三、本题小知识
1.字符串比较记得用equals
2.split函数的应用