码迷,mamicode.com
首页 > 其他好文 > 详细

291.Word Pattern II

时间:2016-07-03 01:44:00      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

    /*
     * 291.Word Pattern II
     * 2016-3-13 by Mingyang
     * 这道题目有一定的难度,又是一个backtracking boolean的题目,不过这里多了一个参数Hashmap
     * 1.长度标准:无
     * 2.可选的范围:从j开始,也就是从str未match的第一个字符开始的一系列的substring
     * 3.往前走一步:改变map,将两个对应的东西分别放入map
     * 4.后退一步:把map刚刚加入的值去掉
     * 5.特别的case:刚好搜完和一个搜完了另一个没搜完,一个return true。另一个return false
     * 我们要backtracking所有的可能的string的组合, 对于每个组合, 我们都需要添加到hashmap中, 
     */
    public boolean wordPatternMatch(String pattern, String str) {
            HashMap map = new HashMap();
            return dfs(pattern, 0, str, 0, map);
        }
    private boolean dfs(String pattern, int i, String str, int j, HashMap map){
            if(i == pattern.length() && j == str.length()){// 如果刚好搜完. 返回true
                return true;
            }
            if(i == pattern.length() || j == str.length()){
                // 如果一个完了, 另一个没完, 返回false
                return false;
            }
            char c = pattern.charAt(i); //initialize new value
            for(int k = j; k < str.length(); k++){
                if(map.get(c) == map.get(str.substring(j, k+1))){
        //如果map中的i对应的值(可以是null) 和 sbustring对应的值相同(也可以是null)
                    Integer val = (Integer)map.get(c);
                    if(val == null){//如果是null
                        map.put(pattern.charAt(i), i);
                     //把pattern的<char,integer>放map中
                        map.put(str.substring(j, k+1), i);
                     //把string的<string,integer>放map中
                    }
                    if(dfs(pattern, i+1, str, k+1, map)){//dfs
                        return true;
                    }
                    if(val == null){// backtracking
                        map.remove(pattern.charAt(i));
                        map.remove(str.substring(j, k+1));
                    }
                }
            }
            return false;
        //注意不要忘了,不能继续走下去拿到合适的match一定要return false
        }

 

291.Word Pattern II

标签:

原文地址:http://www.cnblogs.com/zmyvszk/p/5636394.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!