码迷,mamicode.com
首页 > 其他好文 > 详细

44. Wildcard Matching

时间:2016-05-06 09:30:25      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

//这个题千万不要用recursive,不然超时哦!!!!
public
static boolean isMatch3(String s, String p) { int lens=s.length(); int lenp=p.length(); if(s==null||lens==0){ return lenp==0?true:false; } if(p==null||lenp==0){ return lens==0?true:false; } while(!s.equals("")&&!p.equals("")){ if(s.charAt(0)==(p.charAt(0))||p.charAt(0)==‘?‘){ return isMatch3(s.substring(1),p.substring(1)); } if(p.charAt(0)==‘*‘){ if(p.length()==1) return true; String temp=new String(p); if(isMatch3(s,p.substring(1))) return true; return isMatch3(s.substring(1),temp); } if(s.charAt(0)!=p.charAt(0)&&p.charAt(0)!=‘*‘){ return false; } } if(!s.equals("")){ return false; } while(!p.equals("")){ if(p.charAt(0)!=‘*‘){ return false; } } return true; } /* * 44. Wildcard Matching * 12.2 by Mingyang 跟下面的一道题目一样的,可以分情况讨论 * 首先明白一点,连续重复的*可以合并为一个* * 那么这道题目没有通过recursive的NP来做,直接走的是index,这样不会超时 * 首先,遇到*的情况下就保留ij的值分别到mark,start,然后j++,j走i不走的意思是尝试第一种情况就是 * * match zero character,那么行不行继续看,如果不行,那么j退回到start+1的位置,i不是退回到 * mark,而是退回到mark+1,代表我们用刚才的* match一个试试,依次内推 */ public static boolean isMatch2(String s, String p) { int i = 0; int j = 0; int star = -1; int mark = -1; while (i < s.length()) { if (j < p.length()&& (p.charAt(j) == ‘?‘ || p.charAt(j) == s.charAt(i))) { ++i; ++j; } else if (j < p.length() && p.charAt(j) == ‘*‘) { // 用start和mark分别记录一下当前的历史时间,这两个时间会被不断地重复,直到下次遇到*为止才更换 star = j; mark = i; j++; //这一步是关键,匹配s中当前字符与p中‘*’后面的字符,如果匹配,则在第一个if中处理,如果不匹配,则继续比较s中的下一个字符。 //注意,这里j始终没变,为*下一个位置,但是i每次都加1,s中的下一个数字 } else if (star != -1) { // 如果这两个都不满足的话,前面出现了*那么j就改为start再往下一个走 j = star + 1;//这里的想法是在有*的情况下,如果不相等,j就可以退回到start的下一个,然后i既然从mark i = mark+1;//出发不行,那么i就从mark的下一个试试,看能不能匹配,再不行,mark++,下次从下下个出发 mark++; } else { return false; } } // 跳出来的情况就是i走完了,因为如果j走完了是会return false的,那么就看j能不能以*走到最后。 while (j < p.length() && p.charAt(j) == ‘*‘) { ++j; } return j == p.length(); }

 

44. Wildcard Matching

标签:

原文地址:http://www.cnblogs.com/zmyvszk/p/5464385.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!