单词规律

题目描述:给定一种规律 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"));
}
}

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

LeetCode-290-单词规律的更多相关文章

  1. LeetCode 290. 单词规律(Word Pattern) 41

    290. 单词规律 290. Word Pattern 题目描述 给定一种规律 pattern 和一个字符串 str,判断 str 是否遵循相同的规律. 这里的 遵循 指完全匹配,例如,pattern ...

  2. Java实现 LeetCode 290 单词规律

    290. 单词规律 给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律. 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非 ...

  3. [LeetCode] 290. Word Pattern 单词模式

    Given a pattern and a string str, find if str follows the same pattern. Here follow means a full mat ...

  4. LeetCode 290 Word Pattern(单词模式)(istringstream、vector、map)(*)

    翻译 给定一个模式,和一个字符串str.返回str是否符合同样的模式. 这里的符合意味着全然的匹配,所以这是一个一对多的映射,在pattern中是一个字母.在str中是一个为空的单词. 比如: pat ...

  5. [LeetCode] 290. Word Pattern 词语模式

    Given a pattern and a string str, find if str follows the same pattern. Here follow means a full mat ...

  6. leetcode 290. Word Pattern 、lintcode 829. Word Pattern II

    290. Word Pattern istringstream 是将字符串变成字符串迭代器一样,将字符串流在依次拿出,比较好的是,它不会将空格作为流,这样就实现了字符串的空格切割. C++引入了ost ...

  7. leetcode 139 单词拆分(word break)

    一开始的错误答案与错误思路,幻想直接遍历得出答案: class Solution { public: bool wordBreak(string s, vector<string>& ...

  8. LeetCode——139. 单词拆分

    给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字典中没有重复 ...

  9. Java实现 LeetCode 139 单词拆分

    139. 单词拆分 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可 ...

  10. [LeetCode] 79. 单词搜索(DFS,回溯)

    题目 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个单元格 ...

随机推荐

  1. maven项目 子父级工程。

    一 .什么是 maven 子父级工程? 建立一个maven项目,然后在该项目 下创建一个module,子级的maven,他继承于父级项目. 1.新建立 maven项目,file  ------new- ...

  2. 如何在pyqt中使用 QGraphicsView 实现图片查看器

    前言 在 PyQt 中可以使用很多方式实现照片查看器,最朴素的做法就是重写 QWidget 的 paintEvent().mouseMoveEvent 等事件,但是如果要在图像上多添加一些形状,那么在 ...

  3. Flutter Windows 桌面端支持进入稳定版

    Flutter 创建伊始,我们就致力于打造一个能够构建精美的.可高度定制的.并且可以编译为机器码的跨平台应用解决方案,以充分发挥设备底层硬件的全部图形渲染能力.今天,Flutter 对 Windows ...

  4. Win10正式版屏幕一直闪烁怎么办

    这个原因是由于两个账户都在线,一个账户更替到另一个账户时出现的 解决办法:先注销一个账户,再登录到另一个账户,即只保持一个账户在线,就不会出现屏幕闪烁的情况.

  5. maven项目pom文件下载的包放在哪

    右击项目configure bulid path ----->libraries--->maven dependencies 可以看到每个jar的存放路径

  6. docker平时使用异常记录

    GPU主机重启后,启动使用GPU的容器报错 docker: Error response from daemon: Unknown runtime specified nvidia. 解决办法:修改/ ...

  7. 数据库监测sql执行

    SQL Server Profiler可以检测在数据上执行的语句,特别是有的项目不直接使用sql语句,直接使用ORM框架的系统处理数据库的项目,在调试sql语句时,给了很大的帮助. 之前写了使用SQL ...

  8. 【HDU6647】Bracket Sequences on Tree(树Hash 树上Dp)

    题目链接 大意 给出一颗树,按下列方式生成一个括号序列. function dfs(int cur, int parent): print('(') for all nxt that cur is a ...

  9. 理解ASP.NET Core - 基于JwtBearer的身份认证(Authentication)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 在开始之前,如果你还不了解基于Cookie的身份认证,那么建议你先阅读<基于Cookie ...

  10. Pytest用例编写1

      一.编写pytest测试样例非常简单,只需要按照下面的规则: 测试文件以test_开头(以_test结尾也可以) 测试类以Test开头,并且不能带有 __init__ 方法 测试函数以test_开 ...