实现一个函数用来匹配'.'和'*'的正则表达式(牛客网)

修复匹配'.'和'*'的正则表达式函数
博客内容介绍了如何修正一个用于匹配正则表达式中'.'和'*'的函数,涉及正则表达式和字符串处理技术。

题目:
这里写图片描述

更正代码:

class Solution {
public:
    bool match(char* str, char* pattern)
    {
        if (str == NULL || pattern == NULL)
            return false;
        return matchCore(str, pattern);
    }
    bool matchCore(char* str, char* pattern)
    {
        if (*str == '\0'&&*pattern == '\0')
         return true; //迭代终止条件
        if (*str != '\0'&&*pattern == '\0')
         return false;//迭代终止条件
        if (*(pattern + 1) == '*')
        {
            if (*str == *pattern || (*pattern == '.'&&*str != '\0'))
                return matchCore(str + 1, pattern) || matchCore(str, pattern + 2);
            else
                return matchCore(str, pattern + 2);
        }
        if (*str == *pattern || (*pattern == '.'&&*str != '\0'))
            return matchCore(str + 1, pattern + 1);

        return false;
    }
};

***************************************************************************以下方法有缺陷

#include<iostream>
using namespace std;
bool match(char* str, char* pattern)
{
    if (str == NULL || pattern == NULL){
        return false;
    }
    if (str[0] != pattern[0] && pattern[0] != '.'){
        return false;
    }
    char* p = str;
    char* index;
    char* q = pattern;
    while (*p != '\0'&&*q != '\0'){
        if (*p == *q || *q == '.'){
            p++;
            q++;
        }
        else if (*q == '*'){
            p++;
            q++;
        }
        else if (*(q + 1) == '*'){
            q += 2;
        }
    }
    if (*p != '\0'){
        return false;
    }
    else{
        index = q;
        while (*index != '\0'){
            if (*(index + 1) == '*'){
                index++;
            }
            return false;
        }
        return true;
    }
}
int main(){
    char* str = "aaa";
    char* pattern = "ab*ac*ad*";
    cout << match(str, pattern);
    system("pause");
    return 0;
}
### 牛客网登录相关算法题目 在牛客网上,虽然并没有专门标注为“登录相关”的分类目录,但可以推测这类问题通常涉及字符串处理、密码验证、用户名校验以及会话管理等内容。以下是可能与登录功能相关的几类常见算法题及其描述: #### 字符串匹配与验证 此类题目主要考察如何通过正则表达式或其他方法判断输入是否合法,比如用户名或密码的格式校验。 - **示例题目**: 判断给定字符串是否满足复杂度要求 (至少包含大小写字母数字)。 ```python import re def is_valid_password(password): pattern = r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d]{8,}$' return bool(re.match(pattern, password)) ``` 此代码片段用于检测密码强度[^1]。 #### 用户名唯一性检查 确保注册过程中新用户的名称未被占用是一个典型需求,在大数据量下实现高效查找尤为重要。 - **哈希表应用** 利用集合(Set)结构快速判定重复项的存在与否。 ```python def check_unique_usernames(usernames_list, new_username): existing_users = set(usernames_list) return not(new_username in existing_users) ``` 上述函数演示了怎样基于已有列表评估新增条目的独创性[^2]。 #### Token生成与解析 对于现代Web服务而言,安全可靠的token机制不可或缺。它涉及到随机数生成、加密技术等方面的知识点。 - **JWT(Json Web Tokens)** 实现概览 ```javascript const jwt = require('jsonwebtoken'); function generateToken(payload){ const token = jwt.sign(payload, 'secretKey', { expiresIn: '1h' }); return token; } ``` JavaScript版本展示了创建带有时效性的JSON web tokens过程[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值