HDU 6170 Two strings( DP+字符串匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=6170
题目大意:
给出两个字符串s1和s2(长度小于等于2500)。
s1是一个正常的包含大小写字母的字符串,s2是一个类似正则表达式的字符串,除了大小写字母,还有 " . " 和 " * " 两种符号。
" . " 表示可以匹配任意一个字母。
" * ”表示前一个字符可以重复出现任意次(包括零)。
解题思路:
一道标准的dp O(n^2)。
用dp[i][j]来表示s2的前i个字符和s1的前j个字符能否匹配。
对于s2的每一个字符都跑一遍s1的全部字符dp,分别会遇到以下几种情况:
1.s2的该字符是 " * ",而且恰好是第二个字符,那么建立dp起点,也就是dp[i][0]=1;
2.s2的该字符是 " . ",那么说明s2的第j个字符匹配s1的第i个字符成立,dp[i][j]=dp[i-1][j-1];
3.s2的该字符是 " * ",而且不是第二个字符,那么首先考虑到的情况是 * 前一个字符出现0次的情况,所以至少有dp[i][j]=max(dp[i-2][j],dp[i-1][j]);
这种情况举例可以是 s1: abb s2: abbc* dp[i][j]=dp[i-2][j]
4.在第3个情况的前提,在 * 对应的前一个字符可能出现非零次时,如果 * 之前的字符都能全部匹配好: dp[i][j-1]==1 而且s1的第j个字符重复了: s1[j]==s1[j-1]的情况下,举例: s1: abbcccc s2: abbc*
那么很显然只要判断 s2[i-1]==s1[j]成立 或者 s2[i-1]=='.' ,这两个满足任意一个都说明 " * "成功匹配到s1的第j个字符。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<stack>
#include<queue>
#include<vector>
#include<bitset>
#include<functional> using namespace std; #define LL long long
const int INF = 0x3f3f3f3f; int dp[2505][2505];
char s1[2505],s2[2505]; int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s%s",s1+1,s2+1);
memset(dp,0,sizeof(dp));
int len1=strlen(s1+1),len2=strlen(s2+1);
dp[0][0]=1;
for(int i=1;i<=len2;i++)
{
if(s2[i]=='*'&&i==2) dp[i][0]=1;
for(int j=1;j<=len1;j++)
{
if(s2[i]=='.') dp[i][j]=dp[i-1][j-1];
else if(s2[i]!='*')
{
if(s2[i]==s1[j]) dp[i][j]=dp[i-1][j-1];
}
else
{
dp[i][j]=max(dp[i-2][j],dp[i-1][j]);
if(dp[i][j-1]&&s1[j]==s1[j-1])
{
if(s2[i-1]==s1[j] || s2[i-1]=='.') dp[i][j]=1;
}
}
}
}
if(dp[len2][len1])
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return 0;
}
HDU 6170 Two strings( DP+字符串匹配)的更多相关文章
- 2017多校第9场 HDU 6170 Two strings DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6170 题意:给了2个字符串,其中第2个字符串包含.和*两种特别字符,问第二个字符串能否和第一个匹配. ...
- hdu 6170 Two strings dp
Two strings Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Prob ...
- HDU 6170 - Two strings | 2017 ZJUT Multi-University Training 9
/* HDU 6170 - Two strings [ DP ] | 2017 ZJUT Multi-University Training 9 题意: 定义*可以匹配任意长度,.可以匹配任意字符,问 ...
- HDU 1711(KMP)字符串匹配
链接 HDU 1711 Number Sequence KMP 算法 我以自己理解写的,写的不对,不明白的地方海王子出来,一起共同学习: 字符串匹配 就是KMP,一般思想,用一个for循环找开头 ...
- 2017ACM暑期多校联合训练 - Team 9 1010 HDU 6170 Two strings (dp)
题目链接 Problem Description Giving two strings and you should judge if they are matched. The first stri ...
- HDU 6170 Two strings (dp)
/** * 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6170 * 字符串match, '.'代表匹配任意一个字符,"*" 代表 ...
- HDU 1247 Hat’s Words (字符串匹配,暴力)
题意: 给出一堆单词,如果有一个单词可以分成左右串两个单词,并且在所给的一堆单词中存在,就是hat词,统计所有这样的词,并按字典序输出. 思路: 注意定义,一个hat词可以被两部分已经存在的词组成,那 ...
- HDU 5716 带可选字符的多字符串匹配(ShiftAnd)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5716 [题目大意] 给出一个字符串,找出其中所有的符合特定模式的子串位置,符合特定模式是指,该子串 ...
- HDU 1686 Oulipo / POJ 3461 Oulipo / SCU 2652 Oulipo (字符串匹配,KMP)
HDU 1686 Oulipo / POJ 3461 Oulipo / SCU 2652 Oulipo (字符串匹配,KMP) Description The French author George ...
随机推荐
- js中其他数据类型的值转为字符串的相关总结
有这样一个面试题: 此题考查的是其他类型的值转换为字符串后的结果 下面我们就由此来总结一下其他类型的值转为字符串后的值都是什么? 从上面的实例可以看出,基本数据类型的值转换成字符串都如我们预期的那样. ...
- TotalCommander的两款目录插件
CatalogMaker 与 DiskDir Extended 是两个用于生成文件夹目录的totalCmd插件. 将指定目录下所有文件.文件夹以指定格式存储在一个文本文件中,可作为EverCD+的轻量 ...
- VLAN-1 基础配置及access接口
一.实验拓扑图 二.实验编制 三.实验步骤 1.给对应的PC设置对应的IP和掩码还有接口,以及根据需要划分不同的vlan区域,再用文本标记出不同部门. 2.启动设备(全选) 3.首先用ping命令检查 ...
- Arduino连接L298n驱动板驱动小车的电机
1.L298N介绍 先来讲讲电机驱动,驱动一般使用L298N,L298N 是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vT ...
- Docker运行PostgreSQL
docker-compose.yml version: '3.1' services: db: image: postgres restart: always ports: - 5432:5432 e ...
- maven打jar包,导入本地jar
本地jar包存放目录 项目目录/lib/*.jar 导入jar包配置 <resources> <!--扫描到的配置yml--> <resource> <dir ...
- reduce使用技巧
一.使用reduce同时执行map(循环)和filter(过滤) 例如,将数组中的项的值加倍,然后只选择那些大于50的项 const numbers = [10, 20, 30, 40]; const ...
- java activity工作流
java activity工作流 参考资料: 1.https://blog.csdn.net/jiangyu1013/article/details/73250902 2.https://blog.c ...
- CSS基本语法(慕课网学习笔记)
CSS的声明,内外联样式以及CSS的优先级 css学习.html <!DOCTYPE html> <html lang="en"> <head> ...
- SpringCloud分布式配置中心Config
统一管理所有配置. 1.微服务下的分布式配置中心 简介:讲解什么是配置中心及使用前后的好处 什么是配置中心: 一句话:统一管理配置, 快速切换各个环境的配置 相关产品: 百度的disconf 地址:h ...