单词规律

题目描述:给定一种规律 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. Java 继承02

    向上类型转换 父类型的引用指向子类型的实例. Person p = new Person();Animal a = p; //子类对象赋值给父类类型的变量 注意: 向上转型后,子类单独定义的方法会丢失 ...

  2. Python之基本数据类型与数据结构

    一.基础数据类型 标准数据类型: ·不可变数据类型 Number(数字):int.float.bool.complex(复数) String(字符串) Tuple(元祖):不可变,无法通过下标来修改值 ...

  3. 谷歌CEO桑达尔·皮查伊:区块链可能撼动云计算

    谷歌CEO桑达尔·皮查伊在周二的季度收益电话会议上承认了Web3和区块链的力量. 皮查伊表示,Web3描述了基于区块链的互联网新愿景,区块链是一种分散.安全.透明的技术,支持加密货币网络.不可替代代币 ...

  4. react-(错误代码#31----Minified React error #31)

    错误描述:Uncaught Invariant Violation: Minified React error #31; visit http://facebook.github.io/react/d ...

  5. Redis的配置文件redis.conf详解

    Redis的配置文件位于redis的安装目录下,一般不要直接操作出厂设置的配置文件,需要对其进行备份.# Redis的配置文件样例: # Redis configuration file exampl ...

  6. python 使用pip安装包的总结

    multiprocessing.logging模块安装 如果使用在cmd中使用 pip install multiprocessing 会报错, 将命令改为 pip3 install multipro ...

  7. 【CF888G】Xor-MST(生成树 Trie)

    题目链接 大意 给出\(N\)个点的点权,定义两个点之间的边权为这两个点权的异或和,求这\(N\)个点间的最小生成树. 思路 贪心地想,相连的两个点异或和应当尽量的小. 那么应先从高位确定,因为高位的 ...

  8. 06.python语法入门--与用户交互、运算符

    与用户交互 输入 input    # python2与python3的区别        '''python3'''    # 将获取到的用户输入赋值给变量名res    res = input(' ...

  9. Solution -「CF 555E」Case of Computer Network

    \(\mathcal{Description}\)   Link.   给定 \(n\) 个点 \(m\) 条边的无向图,判断是否有给每条边定向的方案,使得 \(q\) 组有序点对 \((s,t)\) ...

  10. Linux编译安装升级bash5.1

    线上服务器有次做漏洞扫描时,被扫描出有bash漏洞.平时还是比较少遇到有bash的漏洞,好在编译升级比较简单. 测试环境系统:CentOS.Ubuntu 一.下载官网最新bash版本 bash官网下载 ...