<BackTracking> (dfs hard) 291

291. Word Pattern II

class Solution {
    public boolean wordPatternMatch(String pattern, String str) {
        Map<Character, String> map = new HashMap<>();
        return dfs(map, pattern, str);
    }
    
    private boolean dfs(Map<Character, String> map,  String pattern, String str){
        //出口
        if(pattern.length() == 0){
            return str.length() == 0;
        }
        
        char c = pattern.charAt(0);
        if(map.containsKey(c)){
            if(!str.startsWith(map.get(c))){
                return false;
            }else{
                return dfs(map, pattern.substring(1), str.substring(map.get(c).length()));
            }
        }
        
        //map 里没有c
        for(int i = 0; i < str.length(); i++){
            String word = str.substring(0, i + 1);
            if(map.containsValue(word)) continue;
            map.put(c, word);
            if(dfs(map, pattern.substring(1), str.substring(i + 1))){
                return true;
            }
            map.remove(c);
        }
        return false;

    }
}

猜你喜欢

转载自www.cnblogs.com/Afei-1123/p/12179051.html