JZ19 正则表达式匹配

描述

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

数据范围:
1.str 只包含从 a-z 的小写字母。
2.pattern 只包含从 a-z 的小写字母以及字符 . 和 ,无连续的 ''。
3. 0 \le str.length \le 26 \0≤str.length≤26
4. 0 \le pattern.length \le 26 \0≤pattern.length≤26

示例1
输入:“aaa”,"aa"
返回值:true
说明:中间的
可以出现任意次的a,所以可以出现1次a,能匹配上

示例2
输入:“aad”,“cad”
返回值:true
说明:因为这里 c 为 0 个,a被重复一次, * 表示零个或多个a。因此可以匹配字符串 “aad”。

示例3
输入:“a”,“."
返回值:true
说明:".
” 表示可匹配零个或多个(‘*’)任意字符(‘.’)

示例4
输入:“aaab”,“aaa*c”
返回值:false

代码

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @param pattern string字符串 
     * @return bool布尔型
     */
    bool match(string str, string pattern) {
        // write code here
        int n1 = str.length();
        int n2 = pattern.length();
        vector<vector<bool>> dp(n1+1, vector<bool>(n2+1, false));
        
        dp[0][0] = true;
        for(int j = 2; j <= n2; j++) {
            if (pattern[j-1] == '*') {
                dp[0][j] = dp[0][j-2];
            }
        }
        for (int i = 1; i <= n1; i++) {
            for (int j = 1; j <= n2; j++) {
                if (pattern[j-1] != '*' && (str[i-1] == pattern[j-1] || pattern[j-1] == '.')) {
                    dp[i][j] = dp[i-1][j-1];
                } 
                else if (j >= 2 && pattern[j-1] == '*') {
                    if (pattern[j-2] == '.' || pattern[j-2] == str[i-1]) {
                        dp[i][j] = dp[i-1][j] || dp[i][j-2];
                    } else
                        dp[i][j] = dp[i][j-2];
                }
            }
        }
        return dp[n1][n2];
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个综合校验油车和电车牌号的正则表达式: ``` ^(?![DFIOQU])[A-HJ-PR-Z][A-HJ-NP-Z\d]\d{4}(?<!ad|am|ap|az|cd|cm|cp|cz|dd|dm|dp|dz|ea|eb|ec|ed|ef|eg|eh|ej|el|em|en|ep|eq|er|es|et|ev|ew|ex|ey|ez|fd|ff|fg|fh|fj|fk|fl|fm|fn|fp|fq|fr|fs|ft|fv|fw|fx|fy|fz|gd|gf|gg|gh|gj|gk|gl|gm|gn|gp|gq|gr|gs|gt|gv|gw|gx|gy|gz|ha|hb|hc|hd|he|hf|hg|hh|hj|hk|hl|hm|hn|hp|hq|hr|ht|hv|hw|hx|hy|hz|ia|ib|ic|id|ie|if|ig|ih|ij|ik|il|im|in|io|ip|iq|ir|is|it|iv|iw|ix|iy|iz|jd|jf|jg|jh|jj|jk|jl|jm|jn|jp|jq|jr|js|jt|jv|jw|jx|jy|jz|ka|kb|kc|kd|ke|kf|kg|kh|kj|kk|kl|km|kn|kp|kq|kr|ks|kt|kv|kw|kx|ky|kz|la|lb|lc|ld|le|lf|lg|lh|lj|lk|ll|lm|ln|lp|lq|lr|ls|lt|lv|lw|lx|ly|lz|mm|mn|mp|mz|na|nb|nc|nd|ne|nf|ng|nh|nj|nk|nl|nm|nn|np|nq|nr|ns|nt|nv|nw|nx|ny|nz|pa|pb|pc|pd|pe|pf|pg|ph|pj|pk|pl|pm|pn|pp|pq|pr|ps|pt|pv|pw|px|py|pz|qa|qb|qc|qd|qe|qf|qg|qh|qj|qk|ql|qm|qn|qp|qq|qr|qs|qt|qv|qw|qx|qy|qz|ra|rb|rc|rd|re|rf|rg|rh|rj|rk|rl|rm|rn|rp|rq|rr|rs|rt|rv|rw|rx|ry|rz|sa|sb|sc|sd|se|sf|sg|sh|sj|sk|sl|sm|sn|sp|sq|sr|ss|st|sv|sw|sx|sy|sz|ta|tb|tc|td|te|tf|tg|th|tj|tk|tl|tm|tn|tp|tq|tr|ts|tt|tv|tw|tx|ty|tz|ua|ub|uc|ud|ue|uf|ug|uh|uj|uk|ul|um|un|uo|up|uq|ur|us|ut|uv|uw|ux|uy|uz|va|vb|vc|vd|ve|vf|vg|vh|vj|vk|vl|vm|vn|vp|vq|vr|vs|vt|vu|vv|vw|vx|vy|vz|wa|wb|wc|wd|we|wf|wg|wh|wj|wk|wl|wm|wn|wp|wq|wr|ws|wt|wv|ww|wx|wy|wz|xa|xb|xc|xd|xe|xf|xg|xh|xj|xk|xl|xm|xn|xp|xq|xr|xs|xt|xv|xw|xx|xy|xz|ya|yb|yc|yd|ye|yf|yg|yh|yj|yk|yl|ym|yn|yo|yp|yq|yr|ys|yt|yv|yw|yx|yy|yz|za|zb|zc|zd|ze|zf|zg|zh|zj|zk|zl|zm|zn|zo|zp|zq|zr|zs|zt|zv|zw|zx|zy)[DFIOQU]$ ``` 此正则表达式可以用于校验6位车牌号,包括油车和电车,但是不包括以"AD","AM","AP","AZ","CD"等开头的车牌号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值