zoukankan      html  css  js  c++  java
  • 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"));
        }
    }
    

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

  • 相关阅读:
    Windows下如何通过PLSQL连接Oracle
    Windows下安装Oracle
    Linux下安装Oracle
    Linux命令学习-top命令
    Python3下字典、字符串及列表的相互转换
    Linux下搭建Jmeter+Ant+Jenkins自动化测试框架
    Linux下利用Ant调用Jmeter脚本生成HTML测试报告
    Linux下安装Ant
    Linux下安装Jmeter
    python连接数据库
  • 原文地址:https://www.cnblogs.com/kaesar/p/15341284.html
Copyright © 2011-2022 走看看