首页 > 试题广场 >

正则匹配

[编程题]正则匹配
  • 热度指数:175 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
判断一个字符串是否匹配支持 . 和 *的正则表达式。
 . 表示匹配任意一个字符 * 匹配任意多个位于它前面的字符 

输入描述:
输入为一行。 两个字符串,第一个为需要匹配的字符串,第二个为正则表达式。保证数据合法


输出描述:
如果满足输出1,否则输出0
示例1

输入

aab c*a*b

输出

1
#include<iostream>
#include<string>
using namespace std;
bool isMatch(string,string);
int main(){
    string s,p;
    while(cin>>s>>p)
        printf("%d\n",isMatch(s,p));
}
bool isMatch(string s,string p){
    if(p.empty()) return s.empty();
    if (p.size()==1)
        return (s.size()==1&&(s[0]==p[0]||p[0]=='.'));
    if (p[1]!='*'){
        if(s.empty()) return false;
        return (s[0]==p[0]||p[0]=='.')&&isMatch(s.substr(1),p.substr(1));
    }
    while(!s.empty()&&(s[0]==p[0]||p[0]=='.')){
        if (isMatch(s,p.substr(2))) return true;
        s=s.substr(1);
    }
    return isMatch(s, p.substr(2));
}

发表于 2017-10-31 12:36:08 回复(0)
import java.util.*;
import java.util.regex.*;
public class Main {
    public static void main(String[] arg) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String s=sc.next();
            String p=sc.next();
            boolean isMatch=Pattern.matches(p,s);
            if(isMatch){
                System.out.println(1);
            }else {
                System.out.println(0);
            }

        }
    }
}

发表于 2022-11-27 13:56:29 回复(0)

问题信息

上传者:小小
难度:
2条回答 2529浏览

热门推荐

通过挑战的用户