leetcode(74).290. Word Pattern

来源:互联网 发布:chrome浏览器 mac 编辑:程序博客网 时间:2024/06/08 10:48
题意:

给出两个字符串,一个是多个字母构成的,一个是由多个空格隔开的单词构成的,判断两者的结构是否相同。

初步分析:

用两个HashMap<字符串中的值, 出现的位置>,不断循环比较即可。

public class Solution {    public boolean wordPattern(String pattern, String str) {        int len = pattern.length();        String[] s = str.split(" ");        if(len != s.length)            return false;        HashMap<Character, Integer> hm1 = new HashMap<>();        HashMap<String, Integer> hm2 = new HashMap<>();        for(int i=0; i<len; i++)        {            if(hm1.containsKey(pattern.charAt(i)) || hm2.containsKey(s[i]))            {                if(!hm1.containsKey(pattern.charAt(i)) || !hm2.containsKey(s[i]))                    return false;                else                {                    if(!hm1.get(pattern.charAt(i)).equals(hm2.get(s[i])))                        return false;                }            }            hm1.put(pattern.charAt(i),i);            hm2.put(s[i],i);        }        return true;    }}

注意,put是有返回值的,返回的是:上一个关联值

所以,讨论区的一个简洁的代码,厉害了。

public boolean wordPattern(String pattern, String str) {    String[] words = str.split(" ");    if (words.length != pattern.length())        return false;    Map index = new HashMap();    for (Integer i=0; i<words.length; ++i)        if (index.put(pattern.charAt(i), i) != index.put(words[i], i))            return false;    return true;}
虽然这个代码如果单词这边出现个冠词,那边有个a ,可能会出问题吧。。主要是put方法的返回值,往往可以加以利用,学习了。

0 0
原创粉丝点击