[Leetcode] Wildcard Matching
2015-08-13 23:34
357 查看
*匹配任意多个字符,.匹配单个字符
关键在于*的情况,如果遇到了星号,那么需要枚举所有与星号匹配的情况,包括空串的情况
一、递归解法
二、非递归解法
关键在于*的情况,如果遇到了星号,那么需要枚举所有与星号匹配的情况,包括空串的情况
一、递归解法
boolean isMRecursive(String s,String p){ if(p.compareTo("")==0) return s.compareTo("")==0;//如果匹配串为空,那么s也应该为空; if(s.compareTo("")==0){ //如果s为空,那么匹配串应该是* for(int i=0;i<p.length();i++){ if(p.charAt(i)!='*') return false; } return true; } if(p.charAt(0)=='*'){ for(int i=0;i<s.length();i++){ if(isM(s.substring(i),p)) return true; } return false; }else{ if(p.charAt(0)=='.'||(p.charAt(0)==s.charAt(0))){ return isM(s.substring(1),p.substring(1)); }else{ return false; } } }
二、非递归解法
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; } } if(i<s.length) return false;//如果模式串为空,但是匹配串还有剩余,应该返回false if(j<p.length()){//如果模式串有剩余,那么剩余的部分应该趋势* for(;j<p.length();j++){ if(p.charAt(j)!='*') return false; } } return true; }
相关文章推荐
- SublimeText2 快捷键一览表
- 【经典面试题】有关指针、内存空间如何申请调用的问题
- Eclipse下的SVN插件中暂时没有提供更改用户名和密码的功能
- 先挂着。。明天写。。
- 黑马程序员———集合及其collection接口及其子类的简单介绍
- mysql数据库只能本地连接,其他电脑不能连接
- 在Ubuntu和debian上安装OpenCV
- 哈夫曼树的实现
- k短路
- 问题:交叉编译
- Javascript - StringBuilder
- BroadcastReceiver的简单使用
- 实现jQuery扩展总结
- 2015-08-13NOIP模拟赛
- iOS UIPopoverView的使用
- Fragment的知识总结
- Redis对于key的操作命令
- java netty socket库和自定义C#socket库利用protobuf进行通信完整实例
- TCP/IP详解学习笔记
- Linq的join后面跟多个条件