• 正则表达式匹配


     1 package algorithms;
     2 
     3 /**
     4  * 请实现一个函数用来匹配包括'.'和'*'的正则表达式。 模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。
     5  * 在本题中,匹配是指字符串的所有字符匹配整个模式。 例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
     6  * 
     7  * 
     8  **/
     9 
    10 public class StringMatch {
    11     public boolean match(char[] str, char[] pattern) {
    12         return matchCore(str, 0, pattern, 0);
    13     }
    14 
    15     public boolean matchCore(char[] str, int i, char[] pattern, int j) {
    16         if (i >= str.length && j >= pattern.length) {
    17             return true;
    18         }
    19         if (i != str.length - 1 && j == pattern.length - 1)
    20             return false;
    21         // 一种较为复杂的情况 即模式的字符后面一个字符为*
    22         if (j < pattern.length - 1 && pattern[j + 1] == '*') {
    23             // 如果两者当前能够匹配上 模式有两种选择
    24             // 一是向后移动两个字符 二是原地不动
    25             // 如果当成匹配上字符串也需要向后移动一个字符
    26             if (i < str.length && (pattern[j] == str[i] || (pattern[j] == '.' && i < str.length))) {
    27                 return matchCore(str, i + 1, pattern, j + 2) || matchCore(str, i + 1, pattern, j)
    28                         || matchCore(str, i, pattern, j + 2);
    29             } else
    30                 return matchCore(str, i, pattern, j + 2);
    31 
    32         }
    33         // 如果模式的字符后一个不是*时,该情况较为简单 直接比较即可
    34         if (i < str.length && j < pattern.length && (str[i] == pattern[j] || (pattern[j] == '.' && i < str.length)))
    35             return matchCore(str, i + 1, pattern, j + 1);
    36         return false;
    37     }
    38 
    39     public static void main(String[] args) {
    40         char[] str = { 'a', 'a' };
    41         char[] pattern = { 'a', '*' };
    42         StringMatch ma = new StringMatch();
    43         System.out.println(ma.match(str, pattern));
    44     }
    45 }
  • 相关阅读:
    前端调用后台接口下载word文档的两种方法
    Layui form表单提交注意事项
    JavaScript_Util_01
    心理
    小例子
    SQL分割字符串
    绘制10种不同颜色的散点图
    绘制散点图
    subplot的使用
    绘制正弦余弦
  • 原文地址:https://www.cnblogs.com/ustc-anmin/p/10618490.html
Copyright © 2020-2023  润新知