博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
10. Regular Expression Matching
阅读量:5038 次
发布时间:2019-06-12

本文共 1692 字,大约阅读时间需要 5 分钟。

/*     * 10. Regular Expression Matching      * 11.29 by Mingyang      *有一个case:isMatch("ab",".*"')  return true这里*math的是.,所以有两个点,*也可以match无穷个.     * For example, ab*c matches "ac", "abc", "abbbc", etc.     * 一种基本的recurisive题目,matching类的题目一定要有recursive的思想,首先我们按照p的长度分类,     * p的长度为0或者1都是基本case,那么当p的长度大于1的时候,如果p的第二个不为*,那么久没有保障,     * 所以就必须第一个相等,或者p的为.,并且保证后面的也相等。     * 如果p的第二个为*,那么只要第一个相等,那么就验证s与p的第三位是否match,不行s就一步一步的退,     * 如果连第一个都不相等,直接比较s与p的第三位是否相等。     */     public static boolean isMatch(String s, String p) {            if (p.length() == 0)                return s.length() == 0;            // length == 1 is the case that is easy to forget.            // as p is subtracted 2 each time, so if original            // p is odd, then finally it will face the length 1            if (p.length() == 1)      return (s.length() == 1) && (p.charAt(0) == s.charAt(0) || p.charAt(0) == '.');            // next char is not '*': must match current character,还得埋头做人            if (p.charAt(1) != '*') {                if (s.length() == 0)                    return false;                else                    return (s.charAt(0) == p.charAt(0) || p.charAt(0) == '.')                            && isMatch(s.substring(1), p.substring(1));            }else{                // next char is *,那就无法无天了       while (s.length() > 0 && (p.charAt(0) == s.charAt(0) || p.charAt(0) == '.')) {                    if (isMatch(s, p.substring(2)))               //别忘了s往后走的时候验证一下,注意这个时候p并没有变!                        return true;                    s = s.substring(1);                }                return isMatch(s, p.substring(2));            }        }

 

转载于:https://www.cnblogs.com/zmyvszk/p/5394217.html

你可能感兴趣的文章
Bean的Scope
查看>>
【BZOJ】3142: [Hnoi2013]数列
查看>>
http初探
查看>>
elasticsearch的安装
查看>>
__next__()
查看>>
爬取:中国大学排名
查看>>
聊天室(C++客户端+Pyhton服务器)_1.框架搭设
查看>>
UpdatePanel 内控件 更新“外的”控件【转】
查看>>
mybatis中>=和<=的实现方式
查看>>
Python面向对象03/继承
查看>>
java序列化和反序列化
查看>>
绝对定位
查看>>
flink源码编译(windows环境)
查看>>
dpkg 删除 百度网盘 程序
查看>>
服务器nginx安装
查看>>
std::nothrow
查看>>
rest-framework 分页器
查看>>
JQuery(一)安装&选择器 样式篇
查看>>
浏览器的DNS缓存查看和清除
查看>>
浏览器跨域问题
查看>>