AlenaNuna

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

HJ71 字符串通配符

HJ71 字符串通配符

题目:https://www.nowcoder.com/practice/43072d50a6eb44d2a6c816a283b02036?tpId=37&tqId=21294&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=

先读入两个字符串a,b,然后进行大小写转换,统一转化成小写。字符串下标从1开始存储。dp[i][j]表示对于a的前i位字符串和b的前j位字符串是否能匹配,如果可以则为1,否则为0。

处理边界情况:dp[0][0]=1;即两串字符串都为空字符串时是匹配的。然后for(int i=1;i<=la;i++)if(a[i]=='*')dp[i][0]=1;else break;由于*可以对应空字符串,所以***的情况是可以和空字符串匹配的,所以要预处理为1.

状态转移方程:

- `a[i] == b[j]` 或 `a[i] == '?'` 且 `b[j]` 是合法字符时,`dp[i][j] = dp[i-1][j-1]`。
- `a[i] == '*'` 且 `b[j]` 是合法字符时:
- `dp[i][j] = dp[i-1][j-1]`:`*`匹配一个字符
- `dp[i][j] = dp[i][j-1]`:`*`匹配多个字符
- `dp[i][j] = dp[i-1][j]`:`*`匹配空字符

复制代码
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char a[110],b[110];
 4 int la,lb,dp[110][110];
 5 bool Check(char c){
 6     if(c>='a'&&c<='z')return 1;
 7     if(c>='0'&&c<='9')return 1;
 8     return 0;
 9 }
10 int main(){
11     scanf("%s",a+1);
12     scanf("%s",b+1);
13     la=strlen(a+1); lb=strlen(b+1);
14     for(int i=1;i<=la;i++)
15         if(a[i]>='A'&&a[i]<='Z')a[i]=a[i]-'A'+'a';
16     for(int i=1;i<=lb;i++)
17         if(b[i]>='A'&&b[i]<='Z')b[i]=b[i]-'A'+'a';
18     dp[0][0]=1;
19     for(int i=1;i<=la;i++) if(a[i]=='*')dp[i][0]=1;else break;
20     for(int i=1;i<=la;i++){
21         for(int j=1;j<=lb;j++){
22             if(a[i]==b[j])dp[i][j]=max(dp[i][j],dp[i-1][j-1]);
23             else if(a[i]=='?'&&Check(b[j]))dp[i][j]=max(dp[i][j],dp[i-1][j-1]);
24             else if(a[i]=='*'&&Check(b[j])){
25                 dp[i][j]=max(dp[i][j],dp[i-1][j-1]);
26                 dp[i][j]=max(dp[i][j],dp[i][j-1]);
27                 dp[i][j]=max(dp[i][j],dp[i-1][j]);
28             }
29         }
30     }
31     if(dp[la][lb])puts("true");else puts("false");
32 }
复制代码

by:AlenaNuna

posted on   AlenaNuna  阅读(14)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示