291. Word Pattern II

https://leetcode.com/problems/word-pattern-ii/description/

image.png

这道题因为就是PATTERN的一个字母可以对应一个STRING,我们可以用枚举然后回溯看有没有可能的解。
举个例子
pattern = "abab", str = "redblueredblue"
先拿a映射r,b映射e,来了一个出现过的字母,就看后面的东西是不是和A映射的R是一致的。如果不一致,就回溯,说明B映射E不可行。那么B映射ED行不行呢?以此类推。
这里正过来要对应,反过来也要对应。比如A映射E,那么B就不能也映射到E。所以我们还需要检查一个新字符要去映射的时候,从后面取的,有没有被前面的其他字符映射过。如果映射过,要CONTINUE这个可能性。
代码如下:

Map<Character,String> map = new HashMap<>();
    Map<String,Character> map2 = new HashMap<>();
    public boolean wordPatternMatch(String aa, String bb) {
        return help(aa,0,bb,0);
    }
    
    private boolean help(String aa, int i, String bb, int j) {
        if(i == aa.length()){
            return j == bb.length();
        }
        char c = aa.charAt(i);
        if(map.containsKey(c)){
            if(bb.startsWith(map.get(c), j)){
                return help(aa,i+1,bb,j+map.get(c).length());
            }
            return false;
        }else{
            for(int k = j+1; k <= bb.length(); k++){
                String cur = bb.substring(j,k);
                if(map2.containsKey(cur)) continue;
                map.put(c, cur);
                map2.put(cur, c);
                if(help(aa,i+1,bb,k)) return true;
                map2.remove(cur);
            }
            map.remove(c);
        }
        return false;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Given a pattern and a string str, find if str follows the...
    Jeanz阅读 3,255评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,833评论 19 139
  • 一、正则表达式的用途(搜索和替换) 1.1.正则表达式(regular expression,简称regex)是一...
    IIronMan阅读 13,412评论 0 14
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 13,015评论 0 13
  • 今天我生日 嗯 祝自己永远十八……咳咳 希望自己永远开心快乐 这其实是违心的 妈咪永远都是这个世界上最爱你的...
    夜已经深阅读 1,603评论 0 0

友情链接更多精彩内容