单词法则
题目形容:给定一种法则 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")); }}
【每日寄语】 只有有心,生存是会开花的。