zoukankan      html  css  js  c++  java
  • 面试题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);
        }
    }
    

    参考链接

    咸鱼:回溯解法

  • 相关阅读:
    Tree UVA
    stringstream的使用
    Trees on the level UVA
    strchr和strstr函数
    sscanf的用法
    Dropping Balls UVA
    Boxes in a Line UVA
    Broken Keyboard (a.k.a. Beiju Text) UVA
    Matrix Chain Multiplication (堆栈)
    出栈次序
  • 原文地址:https://www.cnblogs.com/yh-simon/p/13197584.html
Copyright © 2011-2022 走看看