文档章节

LeetCode:Word Pattern - 字符串模式匹配

北风其凉
 北风其凉
发布于 2015/10/09 21:59
字数 600
阅读 2491
收藏 1

1、题目名称

Word Pattern(字符串模式匹配)

2、题目地址

https://leetcode.com/problems/word-pattern/

3、题目内容

英文:Given a pattern and a string str, find if str follows the same pattern.

中文:给出一组模式(pattern)和一个字符串(str),查看字符串是否与模式匹配

例如:

  1. pattern = "abba",str = "dog cat cat dog",返回真

  2. pattern = "abba",str = "dog cat cat fish",返回假

  3. pattern = "aaaa",str = "dog cat cat dog",返回假

  4. pattern = "abba",str = "dog dog dog dog",返回假

注意:

模式仅有小写字母构成,字符串被单个空格字符隔开,字符串中每个单词都由小写字母构成;模式和字符串的前后都不包含多余的空格;模式中的每个字母必须匹配一个字符串中长度至少为1的单词。

4、解题方法1

使用HashMap可以很方便地解决本问题。

需要注意的是,模式中的两个不同的字符,不能对应字符串中相同的单词。

Java代码如下:

import java.util.HashMap;

/**
 * @功能说明:LeetCode 290 - Word Pattern
 * @开发人员:Tsybius2014
 * @开发时间:2015年10月9日
 */
public class Solution {
    
    /**
     * 字符串模式匹配
     * @param pattern
     * @param str
     * @return
     */
    public boolean wordPattern(String pattern, String str) {
        
        if (pattern.isEmpty() || str.isEmpty()) {
            return false;
        }
        
        String[] s = str.split(" ");
        if (s.length != pattern.length()) {
            return false;
        }
        
        HashMap<Character, String> hashMap = new HashMap<Character, String>();
        for (int i = 0; i < pattern.length(); i++) {
            if (hashMap.containsKey(pattern.charAt(i))) {
                if (!hashMap.get(pattern.charAt(i)).equals(s[i])) {
                    return false;
                }
            } else if (hashMap.containsValue(s[i])) {
                return false;
            } else {
                hashMap.put(pattern.charAt(i), s[i]);
            }
        }
        
        return true;
    }
}

5、解题方法2

另一个办法需要利用HashMap中put函数的性质。

put函数的声明如下:

public V put(K key, V value)

它的功能是将键值对存入map中,如果map中原本就包含要插入的键,将旧值替换为新值。对于该函数的返回值,如果要插入的键在字典中不存在,则返回null,否则返回替换前的值。根据put函数的性质,可以作出如下Java代码:

import java.util.HashMap;
import java.util.Objects;

/**
 * @功能说明:LeetCode 290 - Word Pattern
 * @开发人员:Tsybius2014
 * @开发时间:2015年10月9日
 */
public class Solution {
    
    /**
     * 模式匹配
     * @param pattern
     * @param str
     * @return
     */
    public boolean wordPattern(String pattern, String str) {
        
        if (pattern.isEmpty() || str.isEmpty()) {
            return false;
        }
        
        String[] s = str.split(" ");
        if (s.length != pattern.length()) {
            return false;
        }
        
        @SuppressWarnings("rawtypes")
        HashMap<Comparable, Integer> hashMap = new HashMap<Comparable, Integer>();
        for (int i = 0; i < pattern.length(); i++) {
            if (!Objects.equals(hashMap.put(pattern.charAt(i), i), hashMap.put(s[i], i)))
                return false;
        }
        
        return true;
    }
}

END

© 著作权归作者所有

共有 人打赏支持
北风其凉

北风其凉

粉丝 118
博文 498
码字总数 463468
作品 4
朝阳
程序员
私信 提问
890. Find and Replace Pattern - LeetCode

Question 890. Find and Replace Pattern Solution 题目大意:从字符串数组中找到类型匹配的如xyy,xxx 思路: Java实现:

yysue
2018/08/21
0
0
Linux自学笔记——Bash脚本之数组以及内置字符串处理

数组: 程序=指令+数据 指令:command 数据:变量、文件 变量:存储单个元素的内存空间; 数组:存储多个元素的连续的内存空间; 数组名:整个数组只有一个名字; 数组索引:编号从0开始; ...

claude_liu
2017/09/29
0
0
LeetCode算法题-Word Pattern(Java实现)

这是悦乐书的第202次更新,第212篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第68题(顺位题号是290)。给定一个模式和一个字符串str,找到str是否完全匹配该模式。完全匹配...

小川94
2018/12/15
0
0
shell编程(二)

博主名: 李常明 博文地址: http://keep88.blog.51cto.com 此笔记出自老男孩书籍: 跟老男孩学linux运维 shell编程实战 shell变量知识进阶与实践 1、shell中的特殊位置参数变量: 例如: 1)...

咖啡猫Mr
2017/05/31
0
0
python库之re模块

首先:re库中有 all = [ "match", "search", "sub", "subn", "split", "findall", 1.match: 这个函数的意思是从头开始匹配,如果有将匹配上的数据返回,但只返回第一个,如果没有匹配上将返......

邪云
2018/03/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据剖析热点新闻:996、巴黎圣母院、奔驰维权为什么成为本周热搜

智能大数据专家表示:每一段重要的时期都会有一串隐秘的数字密码,请往下看: 本周共有50条新闻,作为嗅嗅的样本进行数据分析,得出以下统计图: 1.新闻热词折线统计图 在新闻标题及正文中,...

forespider
19分钟前
0
0
Coding and Paper Letter(六十四)

资源整理。 1 Coding: 1.交互式瓦片编辑器。 tile playground 2.R语言包autokeras,autokeras的R接口。autokeras是一个开源的自动机器学习的软件。 autokeras 3.斯坦福网络分析平台,用于网络...

胖胖雕
56分钟前
1
0
最简单的cd命令是个大坑!

BASH Shell 是大多 Linux 发行版的默认 shell,BASH 有一些自己的内置命令,cd 就是其中的一个。 在centos6里面,系统中不存在 cd 的二进制文件。但是你仍然可以运行该命令,这是因为 cd 是 ...

gaolongquan
今天
1
0
spring获取bean的几种方式

使用jdk:1.8、maven:3.3.3 spring获取Bean的方式 pom.xml文件内容: <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="......

Vincent-Duan
今天
2
0
一段话系列-Linux中IO的同步、异步、阻塞、非阻塞

首先我们框定一下背景,我们探讨的是Linux系统下的IO模型。 同步和异步是针对内核操作数据而言的,同步是指内核串行顺序操作数据,异步是指内核并行(或并发)操作数据,然后通过回调的方式通...

EasyProgramming
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部