牛客网刷题之正则表达式匹配
来源:互联网 发布:郑州做软件开发 编辑:程序博客网 时间:2024/05/21 14:57
题目描述:
解题思路:
归根到底,该题大体上分为两种情况,而两种情况里面还得细分。
当匹配字符串中下一个字符不是”*”:
如果目标字符串的前一个字符和匹配字符串的前一个字符匹配,那么两个字符串都下移一位,否则返回false;
当匹配字符串中下一个字符是”*”:
如果目标字符串的前一位字符和匹配字符串的前一位字符不匹配,那么匹配字符串要后移两位,相当于要跳过“×”;
如果目标字符串的前一个字符和匹配字符串的前一个字符匹配,那么又可以细分取0,取1,*>=2三种情况。
*取0对应跳过当前匹配位,继续寻找patter的下一个匹配位,str不变,pattern+2
*取1对应当前匹配位算一次成功匹配,str+1,pattern+2
*取>=2对应一次成功匹配,继续匹配字符串的下一位是否匹配,str+1,pattern不变
三者取或。即只要有一种情况能匹配成功认为字符串就是匹配成功的。
匹配成功的标志的目标字符串和匹配字符串都到达末端。
题解:
public boolean match(char[] str, char[] pattern) { if (str == null || pattern == null) { return false; } return matchStr(str, 0, pattern, 0); } public boolean matchStr(char[] str, int strIndex, char[] pattern,int patternIndex) { if (strIndex == str.length && patternIndex == pattern.length) { return true; } if (strIndex != str.length && patternIndex == pattern.length) { return false; } // 匹配字符串下一个是* if (patternIndex + 1 < pattern.length && pattern[patternIndex + 1] == '*') { if ((strIndex != str.length && pattern[patternIndex] == str[strIndex]) || (strIndex != str.length && pattern[patternIndex] == '.' )) { return matchStr(str, strIndex, pattern, patternIndex + 2)//*匹配0个字符 || matchStr(str, strIndex + 1, pattern,patternIndex + 2)// 匹配1个字符 || matchStr(str, strIndex + 1, pattern, patternIndex);// *匹配1个,再匹配str中的下一个 } else { return matchStr(str, strIndex, pattern, patternIndex + 2); } } // 匹配字符串下一个不是* if ((strIndex != str.length && pattern[patternIndex] == str[strIndex]) || (strIndex != str.length && pattern[patternIndex] == '.' )) { return matchStr(str, strIndex + 1, pattern, patternIndex + 1); } return false; }
ac结果:
0 0
- 牛客网刷题之正则表达式匹配
- 正则表达式之匹配
- 正则表达式之匹配关系
- 正则表达式之“金额”匹配
- 正则表达式之匹配邮箱
- RF之正则表达式匹配
- 正则表达式之最短匹配
- 正则表达式之匹配顺序问题
- javascript之数字类型正则匹配表达式
- Vim自定义函数之正则表达式匹配
- Javascript 正则表达式之全局匹配
- 正则表达式之最短匹配
- 正则表达式之最短匹配
- 正则表达式之Java匹配指定汉字
- 正则表达式学习之邮箱匹配
- 正则表达式之最短匹配
- 剑指offer(五十八)之正则表达式匹配
- 正则表达式之匹配和切割
- Mac上安装Protocol Buffers
- 台湾李宏毅教授深度学习
- ajax第三天
- 让微信小程序每次请求的时候不改变session_id的方法
- day11.13
- 牛客网刷题之正则表达式匹配
- 成员函数调用
- 计算经纬度、距离、方位角
- QT Creator基础设置
- 394.Coins in a Line-硬币排成线(中等题)
- Part 83 - RegularExpression attribute in asp.net mvc
- android知识回顾-----单向链表
- Part 84 - Compare attribute in asp.net mvc
- android知识回顾-----开源框架-----Volley