单词法则
题目形容:给定一种法则 pattern 和一个字符串 str ,判断 str 是否遵循雷同的法则。
这里的 遵循 指齐全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连贯的对应法则。
示例阐明请见LeetCode官网。
起源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl…
著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。
解法一:字符匹配
- 首先,失去字符串s的所有单词放到一个List外面strList(须要向空字符串排除掉);
- 而后,判断strList的数量和pattern的长度是否雷同,如果不雷同,阐明无奈遵循法则,间接返回false。
而后,申明一个Map即mappings用来存pattern中的字符和strList中单词的映射关系,遍历pattern的字符,具体过程如下:
- 如果以后字符在mappings的key外面且strList以后的单词和以后字符在mapping中映射的单词不雷同,则返回false;
- 如果以后字符不在mappings,如果strList以后的单词在mappings的values集外面,则返回false;如果strList以后的单词不在mappings的values集外面,则将以后字符和strList以后的单词放入mappings中,而后持续判断下一个字符。
- 最初,如果没有发现不匹配的映射关系,则返回true。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class LeetCode_290 {
public static boolean wordPattern(String pattern, String s) {
String[] strs = s.split(" ");
List<String> strList = new ArrayList<>();
for (String str : strs) {
if (str != "") {
strList.add(str);
}
}
// 判断strList的数量和pattern的长度是否雷同,如果不雷同,阐明无奈遵循法则,间接返回false
if (pattern.length() != strList.size()) {
return false;
}
Map<Character, String> mappings = new HashMap<>();
for (int i = 0; i < strList.size(); i++) {
if (mappings.keySet().contains(pattern.charAt(i))) {
if (!strList.get(i).equals(mappings.get(pattern.charAt(i)))) {
return false;
}
} else {
if (mappings.values().contains(strList.get(i))) {
return false;
}
mappings.put(pattern.charAt(i), strList.get(i));
}
}
return true;
}
public static void main(String[] args) {
System.out.println(wordPattern("abba", "dog dog dog dog"));
}
}
【每日寄语】 只有有心,生存是会开花的。
发表回复