// 用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.*"));
}
}
Regular Expression Matching
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.