美文网首页
面试题19:正则表达式匹配

面试题19:正则表达式匹配

作者: scott_alpha | 来源:发表于2019-10-06 23:39 被阅读0次

题目:请实现一个函数用来匹配包含‘.’和‘’的正则表达式。模式中的字符‘.’表示任意一个字符,而‘’表示它前面的字符可以出现任意次(含0次)。
思路:先匹配第一个字符,如果不匹配直接返回false,如果匹配再往下,看下pattern的第二个字符是不是,待续。
解决方案:
public class Question19 {
public static boolean match(char[] str, char[] pattern){
if (str == null || pattern == null) return false;
int strIndex = 0;
int patternIndex = 0;
return matchCore(str, strIndex, pattern, patternIndex);
}
private static boolean matchCore(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 (str[strIndex] == pattern[patternIndex] && strIndex != str.length || pattern[patternIndex] == '.' && strIndex!=str.length){
// 分三种情况递归
return matchCore(str, strIndex, pattern, patternIndex+2) //视x
匹配0个字符,即前一个字符出现0次
|| matchCore(str, strIndex+1, pattern, patternIndex+2) //匹配一个字符,即
前一个字符仅出现1次
|| matchCore(str, strIndex+1, pattern, patternIndex); //匹配1个字符,模式保持不变
}else {
// 第一个位置不匹配,模式后移两位,也就是x*匹配0个字符
return matchCore(str, strIndex, pattern, patternIndex+2);
}

    }
    // 第一个字符匹配,但模式第二个不是*,模式和字符串都后移一位
    if (strIndex != str.length &&(str[strIndex] == pattern[patternIndex] ||pattern[patternIndex] == '.')){
        return matchCore(str, strIndex+1, pattern, patternIndex+1);
    }else {
        // 第一个字符不匹配,并且模式第二个位置不是*
        return false;
    }
}

public static void main(String[] args) {
    char[] str = new char[]{'a','a','a'};
    char[] pattern = new char[]{'a','.','a'};
    System.out.println(match(str, pattern));
}

}

相关文章

  • 正则表达式匹配

    《剑指offer》面试题19:正则表达式匹配 题目:请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字...

  • 剑指offer第二版-19.正则表达式匹配

    本系列导航:剑指offer(第二版)java实现导航帖 面试题19:正则表达式匹配 题目要求:实现正则表达式中.和...

  • 剑指offer学习笔记:8.2 字符串

    面试题53:正则表达式匹配请实现一个函数用来匹配包含'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符...

  • Nginx 匹配规则

    无 :默认匹配,普通匹配 = :精确匹配 ~* :匹配正则表达式,不区分大小写 ~ :匹配正则表达式,区分大小写 ...

  • 面试题19:正则表达式匹配

    请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以...

  • 面试题19:正则表达式匹配

    题目 请实现一个函数用来匹配‘.’和‘ * ’的正则表达式。模式中的字符‘.’表示任意一个字符,而‘*’表示它前面...

  • 面试题19:正则表达式匹配

    题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面...

  • 面试题19:正则表达式匹配

    题目:请实现一个函数用来匹配包含‘.’和‘’的正则表达式。模式中的字符‘.’表示任意一个字符,而‘’表示它前面的字...

  • 2019.8.15分享:正则表达式字符匹配攻略

    一、正则表达式 正则表达式是匹配模式,要么匹配字符,要么匹配位置。 这次分享主要将提下正则表达式字符匹配 • 两种...

  • python与正则表达式 2020-01-02(未经允许,禁止转

    正则表达式 正则表达式与程序语言无关。正则表达式做匹配实际上就做3件事:【字符匹配】+【次数匹配】+【逻辑匹配】下...

网友评论

      本文标题:面试题19:正则表达式匹配

      本文链接:https://www.haomeiwen.com/subject/uwsppctx.html