openjudge 6256 带通配符的字符串匹配(动态规划)
来源:互联网 发布:华为mate9网络频段 编辑:程序博客网 时间:2024/05/16 01:14
6252:带通配符的字符串匹配
- 查看
- 提交
- 统计
- 提问
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
通配符是一类键盘字符,当我们不知道真正字符或者不想键入完整名字时,常常使用通配符代替一个或多个真正字符。通配符有问号(?)和星号(*)等,其中,“?”可以代替一个字符,而“*”可以代替零个或多个字符。
你的任务是,给出一个带有通配符的字符串和一个不带通配符的字符串,判断他们是否能够匹配。
例如,1?456 可以匹配 12456、13456、1a456,但是却不能够匹配23456、1aa456;
2*77?8可以匹配 24457798、237708、27798。- 输入
- 输入有两行,每行为一个不超过20个字符的字符串,第一行带通配符,第二行不带通配符
- 输出
- 如果两者可以匹配,就输出“matched”,否则输出“not matched”
- 样例输入
1*456?11111114567
- 样例输出
matched
tips:dp[i][j]代表截止到i,j位置处是否匹配
动态转移方程见代码
#include<iostream>using namespace std;//dp[i][j]代表第一个字符串截止到i位置,//第二个字符串截止到j位置能否匹配const int maxn=40;int dp[maxn][maxn];string s1,s2;void init(){//空字符串匹配 dp[0][0]=1;//如果第一个字符串前导字符是* for(int i=1;s1[i]=='*';i++){dp[i][0]=1; } }int main(){cin>>s1>>s2;s1=' '+s1;s2=' '+s2 ; init();for(int i=1;i<s1.size();i++){for(int j=1;j<s2.size();j++){if(s1[i]=='?')dp[i][j]=dp[i-1][j-1];else if(s1[i]=='*'){dp[i][j]=(dp[i-1][j-1]||dp[i-1][j]||dp[i][j-1]);}else if(s1[i]==s2[j])dp[i][j]=dp[i-1][j-1];} } if(dp[s1.size()-1][s2.size()-1] )cout<<"matched"<<endl; else cout<<"not matched"<<endl;return 0; }
阅读全文
0 0
- openjudge 6256 带通配符的字符串匹配(动态规划)
- 带通配符的字符串匹配:动态规划
- OpenJudge 6252 带通配符的字符串匹配
- 带通配符的字符串匹配问题的动态规划算法
- 【Openjudge】带通配符的字符串匹配(递归)
- [openjudge]带通配符的字符串匹配(dp)
- OPENJUDGE NOI 6252 带通配符的字符串匹配
- 【Noi OpenJudge】 带通配符的字符串匹配 解题报告
- 动态规划 | 带有通配符的字符串匹配(浅显易懂)
- 动态规划 | 带有通配符的字符串匹配(浅显易懂)
- 带通配符*的字符串匹配
- 带通配符的字符串匹配
- 带通配符的字符串匹配
- 带通配符的字符串匹配问题
- openjudge6252 带通配符的字符串匹配
- 字符串转换成整数/带通配符的字符串匹配
- 字符串转换成整数&带通配符的字符串匹配问题
- 字符串转换成整数,带通配符的字符串匹配
- Linux——系统分区之分区与格式化
- html5可缩放时钟
- C++模拟ATM
- Linux使用笔记
- 1002. A+B for Polynomials (25)
- openjudge 6256 带通配符的字符串匹配(动态规划)
- Linux网络编程——I/O多路复用
- 17.8.27 校内赛 解题报告【卢卡斯定理】【dfs+hash】【线段树】
- 小白文科生眼中的Linux系统
- Spring 事务详解
- 51Nod 迷宫游戏
- 匈牙利模板--poj 3041最小匹配
- 【asp.net】小结
- Go 语言,开源服务端代码自动生成 框架