Regular Expression Matching

// 用c/c++代碼會簡潔並且效率高很多。直接使用c/c++中的字符數組char*做代碼會簡潔很多
package leetcode.xuyi;

import org.junit.Test;

/**
 * Created by ethan on 2015/5/17.
 */
public class RegularExpressionMatching {
    public boolean isMatch(String s, String p) {
        return  isMatching(s,0,p,0);
    }
    // 這種題還是c和c++ 寫比較好可以 通過判斷是否爲‘\0’來判斷。
    public boolean isMatching(String s, int index_s, String p, int index_p){
        if (s==null || p==null) return false;
        if (index_s > s.length() || index_p > p.length()) return false;
        if (index_p==p.length()) return (index_s == s.length());
        // 兩種能滿足繼續遞歸下去的條件, 否則都return false
        if ((index_p+1)<p.length() && p.charAt(index_p+1)=='*'){
            while (p.charAt(index_p)=='.'&&index_s<s.length() || ((index_s<s.length()&&index_p<p.length())&&s.charAt(index_s)==p.charAt(index_p))){
                if (isMatching(s, index_s+1, p, index_p+2)) return true;
                index_s++;
            }
            return  isMatching(s, index_s, p, index_p+2);
        }else if ( p.charAt(index_p)=='.' || ((index_s<s.length()&&index_p<p.length())&&s.charAt(index_s)==p.charAt(index_p))){
            return isMatching(s, index_s+1, p, index_p+1);
        }
        return false;
    }

    @Test
    public void test10(){
        System.out.println(isMatch("aa1", "aa.*"));
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章