*匹配任意多个字符,.匹配单个字符
关键在于*的情况,如果遇到了星号,那么需要枚举所有与星号匹配的情况,包括空串的情况
一、递归解法
1 boolean isMRecursive(String s,String p){ 2 if(s.compareTo("")==0) return p.compareTo("")==0; 3 if(p.charAt(0)==‘*‘){ 4 for(int i=0;i<s.length();i++){ 5 if(isM(s.substring(i),p)) return true; 6 } 7 return false; 8 }else{ 9 if(p.charAt(0)==‘.‘||(p.charAt(0)==s.charAt(0))){ 10 return isM(s.substring(1),p.substring(1)); 11 }else{ 12 return false; 13 } 14 } 15 }
二、非递归解法
boolean isMIterate(String s,String p){ if(s.compareTo("")==0) return p.compareTo("")==0; int i=0,j=0; int start=-1; int ss=0; while(i<s.length()&&j<p.length()){ if(i==s.length()) return j==p.length(); if(p.charAt(j)==‘*‘){ start=j; ss=i+1; i++; }else if(p.charAt(j)==‘.‘||p.charAt(j)==s.charAt(i)){ i++; j++; }else if(start!=-1){ i=ss; j=start+1; }else{ return false; } } }
时间: 2024-12-20 14:37:35