这个是LeetCode上的一道题目。本机上运行时正确的,但是LeetCode上显示是错误的,所以没有办法了只能记录在博客上了。

我的想法是先把pattern和str都转化成数组。例如"abba"就记录成 p[0] = a, p[1] = b, p[2] = b, p[3] = a。

然后再使用hashmap统计字符出现在数组中的位置。

最后将pattern和str统计的位置进行比较,如果相同就是遵循规则的,不同就是不遵循规则的。

下面是代码。你也可以查看我的GitHub来查看更多LeetCode题目解析。

/**
* 查看单词str是否匹配模式pattern
*
* @param pattern
* @param str
* @return
*/
public boolean wordPattern(String pattern, String str) {
char[] p = pattern.toCharArray();
String[] s = str.split(" "); HashMap<Character, String> pMap = new HashMap<Character, String>();
for (int i = 0; i < p.length; i++) {
if (pMap.containsKey(p[i])) {
String v = pMap.get(p[i]);
v = v + i;
pMap.put(p[i], v);
} else {
pMap.put(p[i], String.valueOf(i));
}
} HashMap<String, String> sMap = new HashMap<String, String>();
for (int i = 0; i < s.length; i++) {
if (sMap.containsKey(s[i])) {
String v = sMap.get(s[i]);
v = v + i;
sMap.put(s[i], v);
} else {
sMap.put(s[i], String.valueOf(i));
}
} Collection<String> values = pMap.values();
Iterator<String> it = values.iterator();
while (it.hasNext()) {
String v = it.next();
if (!sMap.containsValue(v))
return false; } return true;
}

给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。 这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式。的更多相关文章

  1. (原)未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值与DATEADD

    SQLServer2014,查询分析器中 这样的脚本是没有问题的:AND TPO.CREATEON <= DATEADD(DAY, 1, '2017/3/3 0:00:00') 但.NET  D ...

  2. Excel表格中无法中间插入新行列! 提示:在当前工作表的最后一行或列中,存在非空单元格,解决方案

    excel中新增行列时报错: 提示:在当前工作表的最后一行或列中,存在非空单元格,所以无法插入新行或新列.

  3. mybatis的mapper中,实体非空检验问题

    因为项目变动,数据库需要删除一个字段,于是勤劳的我把项目中对应的实体属性也给弄掉了,可是没有弄彻底,mybatis里面的mapper没有管,当时感觉是选择性的插入: <if test=" ...

  4. Linux软件安装包中devel与非devel包之间的区别

    带devel(develop)的包,俗称开发包.功能上与普通包相同,但体积更大使用rpm -qi看看这两类包的区别: # rpm -qi glibc-devel-2.12-1.149.el6.x86_ ...

  5. 290.单词模式。给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。(c++方法)

    题目描述: 给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式. 这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之 ...

  6. List和String的非空判断

    1.如果想判断list是否为空,可以这么判断: if(null == list || list.size() ==0 ){ //为空的情况 }else{ //不为空的情况 } 2.list.isEmp ...

  7. Oracle中验证非空的函数NVL(),NVL2()总结

    1.NVL()函数 NVL函数的格式如下: NVL(expr1,expr2) 含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值. 2 N ...

  8. 给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)

    """ #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 解题思路: 1.设定一个 ...

  9. python小练习: 给定一个数组 按重复次数 降序排列输出 数组非空且为正整数

    假设有个列表  a=[1,1,1,2,2,4,5,5,5,5] (非空且为正整数) 那么根据要求 最终输出的形式为  5,1,2,4  (按重复次数 降序排列输出) 代码实现及解释: a=[1,1,1 ...

随机推荐

  1. Libre 6010「网络流 24 题」数字梯形 (网络流,最大费用最大流)

    Libre 6010「网络流 24 题」数字梯形 (网络流,最大费用最大流) Description 给定一个由n 行数字组成的数字梯形如下图所示.梯形的第一行有m 个数字.从梯形的顶部的m 个数字开 ...

  2. Jenkins-Pipeline 流水线发布

    基于docker部署 1.部署jenkins $ yum -y install java $ java -version openjdk version "1.8.0_181" O ...

  3. (转)Python中的模块循环导入问题

    本文转自: https://wiki.woodpecker.org.cn/moin/MiscItems/2008-11-25 问题 cleven <shenglipang@gmail.com&g ...

  4. Hadoop生态圈-Azkaban实战之Command类型执行指定脚本

    Hadoop生态圈-Azkaban实战之Command类型执行指定脚本 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1>.服务端测试代码(别忘记添加权限哟!) [yinzh ...

  5. vim文本删除方法 Linux

    1,先打开某个文件: vim   filename 2,转到文件结尾 在命令模式输入 G 3,转到10行 在命令模式输入 10G 4,删除所有内容:先用G 转到文件尾,然后使用下面命令: :1, .d ...

  6. Linux-Xshell会话保持

    1.Xshell客户端设置 2.服务端设置 修改/etc/ssh/sshd_config文件,找到 ClientAliveInterval 0和ClientAliveCountMax 3并将注释符号( ...

  7. 你真的理解js的赋值语句么

    之前谢亮兄和我一起讨论的一个问题: var a = {}; a.x = a = 3; a 的值是什么. 其实当执行赋值语句的时候,js 的 = 左侧不是原始变量地址,而是一个新值.怎么理解这句话呢? ...

  8. ASP.NET中最简单的自定义控件

    ASP.NET用户控件一般适用于产生相对静态的内容,所以没有builtin的事件支持.本文讨论用户控件返回事件的方法.          假定用户控件(UserControl.ascx)中包含按钮控件 ...

  9. CS229 笔记04

    CS229 笔记04 Logistic Regression Newton's Method 根据之前的讨论,在Logistic Regression中的一些符号有: \[ \begin{eqnarr ...

  10. Android Studio 新建drawable-hdpi、drawable-mdpi等

    在不同的模式“Project” / “Android”的文件夹中查看文件夹.如果文件夹丢失,您可以轻松添加它们. 1.在“res”文件夹上右键“New”->”Android Resource D ...