题目链接
英文链接:https://leetcode.com/problems/word-pattern/
中文链接:https://leetcode-cn.com/problems/word-pattern/
题目详述
给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。
这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式。
示例1:
1 | 输入: pattern = "abba", str = "dog cat cat dog" |
示例 2:
1 | 输入:pattern = "abba", str = "dog cat cat fish" |
示例 3:
1 | 输入: pattern = "aaaa", str = "dog cat cat dog" |
示例 4:
1 | 输入: pattern = "abba", str = "dog dog dog dog" |
说明:
你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母。
题目详解
- 运用一个
map存储字符到字符串的映射。 - 由于是双向映射,必须两个方向同时满足条件或同时不满足条件。
- 遍历
pattern的每一个字符,查看映射关系。 - 若
map中存在字符c到str的映射,则当前字符串必须等于str,否则不匹配,返回false。通过map.get(c).equals(split[i])判断,时间复杂度为 O(1)。 - 若
map中不存在字符c到str的映射,则当前字符串必须不等于str,否则不匹配,返回false。通过map.containsValue(split[i])判断,时间复杂度为 O(n)。 - 遍历结束没有发现不匹配的情况返回
true。
1 | public class LeetCode_00290 { |
- 由于是双向映射,运用两个
map来存储映射关系是更好的选择。 - 并且,可以改变映射关系,通过映射到索引来进行判断。
- 若映射到不是同一个索引,说明不匹配。
- 表示不存在的索引需要单独指定,与其他索引不冲突,本题用
-1表示。 - 注意
Integer等包装类的对象判断相等要用equals进行比较,否则会出错(特别是超过 [-128, 127] 这个范围)。
1 | public class LeetCode_00290 { |