290. Word Pattern-leetCode(字符模式匹配)(简单,使用两组Map进行查找判断)

好困啊,终于做出来了。

题目如下:

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:
pattern = “abba”, str = “dog cat cat dog” should return true.
pattern = “abba”, str = “dog cat cat fish” should return false.
pattern = “aaaa”, str = “dog cat cat dog” should return false.
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.

这里的模式判别就是符号和单词的映射。所以直接想到了使用map这种容器进行承装记录映射。

字符串转化成字符串数组,或者字符数组,这些基本功前面也遇到过。

这里需要注意的就是word和pattern存在一种双向的映射,即两个方向都要求是单射。所以最后建立两个Map才满足双向查询。

附上代码

import java.util.HashMap;
import java.util.Map;


public class Solution {
    public boolean wordPattern(String pattern, String str) {
        //build a pattern container 
        //if is empty then construct a new word to save it
        //find if the word exist in the container,then

        String[] words=str.split(" ");
        String[] patternArray=pattern.split("");
        for(String temp:words){
         //   System.out.println("words:");
         //   System.out.println(temp);
        }
        for(String temp:patternArray){
         //   System.out.println("patternArray");
          //  System.out.println(temp);
        }
       /// System.out.println("patternArray:"+patternArray);
        int length=words.length;
        if(length!=pattern.length()){
            return false;
        }
       // System.out.format("word length %d,pattern length %d \n",words.length,pattern.length());

        Map<String,String> map=new HashMap<String ,String>();
        Map<String,String> demap=new HashMap<String ,String>();
        for(int i=0;i<length;i++){//start number wrong once 
            if(map.get(patternArray[i])==null&&demap.get(words[i])==null){
                //map.put(key, value)       
                map.put(patternArray[i],words[i]);
                demap.put(words[i],patternArray[i]);
             //   System.out.format("This is null,and put a %s \n",words[i]);
            }
            else if (    (  (map.get(patternArray[i])!=null) && !map.get(patternArray[i]).equals(words[i])     )
            ||( (demap.get(words[i])!=null)&& !demap.get(words[i]).equals(patternArray[i])  )  ){
              //  System.out.format("Getting: %s 's value,is %s ,but not equals %s",patternArray[i],map.get(patternArray[i]),words[i]);
                return false;
            }//logec wrong once

        }
        return true ;
        //how about using a uniq container to test and catch excptions ?   
    }

}
总结
  • 巧妙地使用java容器可以节约很多的代码,要多多熟悉java的库内容。
  • 不得不承认测试是一个软件健壮与否的重要判定。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小马工匠坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值