• LeetCode-290-单词规律


    单词规律

    题目描述:给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。

    这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。

    示例说明请见LeetCode官网。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/word-pattern/
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解法一:字符匹配
    • 首先,得到字符串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"));
        }
    }
    

    【每日寄语】 只要有心,生活是会开花的。

  • 相关阅读:
    RabbitMQ WindowServer2008R2 安装配置
    wpf的低调自定义属性面板PropertyGrid
    复旦大学2020--2021学年第二学期高等代数II期末考试情况分析
    复旦大学2020--2021学年第二学期(20级)高等代数II期末考试第七大题解答
    复旦大学2020--2021学年第二学期(20级)高等代数II期末考试第八大题解答
    复旦高等代数II(20级)每周一题
    复旦大学高等代数课程介绍
    consul 下线服务 服务注销脚本
    consul 集群搭建
    Linux Limit相关内容设置大全(值得收藏)
  • 原文地址:https://www.cnblogs.com/kaesar/p/15341284.html
Copyright © 2020-2023  润新知