面试题16.18.模式匹配

Posted yh-simon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题16.18.模式匹配相关的知识,希望对你有一定的参考价值。

技术图片

回溯

代码

/**
 * 回溯算法
 * 95ms
 *
 */
public boolean patternMatching(String pattern,String value){
    String s[]=new String[2];
    return solve(s,pattern,0,value,0);
}

/**
 *
 * @param s             s[0]为a对应的字符串  s[1]为b对应的字符串
 * @param pattern       模式串
 * @param index1        模式串匹配位置
 * @param value         匹配串
 * @param index2        匹配串匹配的位置
 * @return
 */
private boolean solve(String[] s, String pattern, int index1, String value, int index2) {
    //匹配完成
    if(index1==pattern.length()&&index2==value.length()) return true;
    //当匹配串匹配位置等于 匹配串长度的时候  也可以继续匹配,因为模式匹配中的a,b可以匹配空串
    if(index1>=pattern.length()||index2>value.length()) return false;
    int num=pattern.charAt(index1)-‘a‘;
    if(s[num]==null){
        //从当前尝试a或b对应的字符串的每一种可能
        for(int i=index2;i<=value.length();i++){
            s[num]=value.substring(index2, i);
            if(!s[num].equals(s[num^1])&&solve(s,pattern,index1+1,value,i)) return true;
        }
        //失配时应将设置过的对应字符串为空
        s[num]=null;
        return false;
    }else{
        //若此前a或b已有对应的字符串匹配成功了,则查看当前位置时候能否匹配上
        int end=index2+s[num].length();
        if(end>value.length()||!value.substring(index2, end).equals(s[num])) return false;
        return solve(s, pattern, index1+1, value, end);
    }
}

参考链接

咸鱼:回溯解法

以上是关于面试题16.18.模式匹配的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-面试题 16.18. 模式匹配

剑指offer 面试19题

《剑指offer》 面试题53 :正则表达式匹配 Java

面试题19:正则表达式//TODO题读不明白

LeetCode面试刷题技巧- 字符串匹配习题集

python面试题-如“上海 深圳 深圳 上海“,要求输入一个匹配模式,比如: aabb,判断是否符合