首页 > 编程知识 正文

剑指offer java,牛客剑指offer

时间:2023-05-03 06:31:27 阅读:249222 作者:4677

题目描述

请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。
在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配

思路

主要考虑 出现了’*’

方式1:s和p指向的都不相等,就相当于模板中 * 前面的出现了0次,此时必须让p指针向后移动2位,让模板跳过 * 即可。(对于abge和ac*mn,s指b,p指c,则让p指向m,即p+2。认为c没出现过)方式2:s和p指向的相等(这里的相等可以是真正的相等,也可以是 ‘.’ 标记的相等)。比如abcd和ab * cf,其中s和p都指向了b。此时应该s+1和p+2。比如abbcd和ab * cf,其中s和p都指向了b。由于b出现了多次,应该不着急移动p,所以此时s+1即可。比如"cba",“cb * a * a”,我也可以认为,p指向的第1个a没出现过,即使你相等。因此此时可以s不动,p+2。 public class Solution { public boolean match(char[] str, char[] pattern){ if(str == null || pattern == null) return false; return matchCore(str,pattern,0,0); } public boolean matchCore(char[] str, char[] pattern, int s, int p){ if(s == str.length && p == pattern.length) return true; if((s < str.length && p == pattern.length)) return false; if(p+1 < pattern.length && pattern[p+1] == '*'){ if((s < str.length && pattern[p] == '.') || (s < str.length && pattern[p] == str[s])){ return matchCore(str,pattern,s,p+2) ||//"cba","cb*a*a" matchCore(str,pattern,s+1,p+2) || //"abcd","ab*cf" matchCore(str,pattern,s+1,p); //"abbcd","ab*cf" }else{ return matchCore(str,pattern,s,p+2); } } if(s < str.length && (pattern[p] == str[s] || pattern[p] == '.')) return matchCore(str,pattern,s+1,p+1); return false; }}
Java程序员掌握这些至少涨薪5K计算机毕业设计Java校服征订系统(源码+系统+mysql数据库+Lw文档)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。