博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
词组模式 Word Pattern
阅读量:5967 次
发布时间:2019-06-19

本文共 1883 字,大约阅读时间需要 6 分钟。

hot3.png

问题:

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

Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str.

Examples:

  1. pattern = "abba", str = "dog cat cat dog" should return true.
  2. pattern = "abba", str = "dog cat cat fish" should return false.
  3. pattern = "aaaa", str = "dog cat cat dog" should return false.
  4. pattern = "abba", str = "dog dog dog dog" should return false.

Notes:

You may assume pattern contains only lowercase letters, and str contains lowercase letters separated by a single space.

解决:

①使用hash map,键---pattern中的字符,值---str中的单词,每个pattern中的字符与str中的单词实现一一对应,不能重复映射。耗时3ms.

public class Solution {

    public boolean wordPattern(String pattern, String str) {//每个pattern的字符对应str中的一个字符串
        String[] s = str.split(" ");
        char[] pchar = pattern.toCharArray();
        if (pchar.length != s.length) {//必须
            return false;
        }
        Map<Character,String> map = new HashMap<>();//键---pattern中的字符,值---str中的词组
        for (int i = 0;i < pchar.length ;i ++ ) {
            if (! map.containsKey(pchar[i])) {
                if (! map.containsValue(s[i])) {//验证没有已经映射过,也可以使用Set保存已经映射过的单词。
                    map.put(pchar[i],s[i]);
                }else{
                    return false;
                }
            }else{
                if(! map.get(pchar[i]).equals(s[i])){
                    return false;
                }
            }
        }
        return true;
    }
}

②其实写法一样,但是这样效率会更高一些。

public class Solution {

    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;
    }
}

转载于:https://my.oschina.net/liyurong/blog/992522

你可能感兴趣的文章
提高信息安全意识对网络勒索病毒说不
查看>>
解酒方法
查看>>
vi 命令
查看>>
1.1
查看>>
[logstash-input-redis]插件使用详解
查看>>
优化应用的电池寿命(笔记)-1
查看>>
SSH Secure Shell Client
查看>>
使用Jquery 加载页面时调用JS
查看>>
css+div+jquery弹出层
查看>>
求职相关(链接,不定期更新)
查看>>
pdo 连接数据库 报错 could not find driver 解决方法
查看>>
maya pyside 多个窗口实例 报错 解决
查看>>
我的友情链接
查看>>
通知中心
查看>>
我的友情链接
查看>>
MVC中的三个模块
查看>>
Line: 220 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1
查看>>
oracle 常用命令大汇总
查看>>
2012年春运火车票电话和网上订票技巧、攻略
查看>>
根据request获取请求路径
查看>>