单词法则

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