【C++】子序列匹配问题
/*
一个串的“子序列”(subsequence)是将这个串中的一些字符提取出来得到一个新串,并且不改变它们的相对位置关系。例如,串"XDoi","XianYu!","TaiQiangLa!","loa"都是串"XianYuDalaoTaiQiangLa!"的子序列。 我们说串t是串s1和s2的公共子序列,当且仅当t是s1的子序列且t是s2的子序列。定义串s1和s2的相似度为它们最长公共子序列的长度。 现在给定一个文本串S和一组模式串T[1]、T[2]、……、T[n]。求T[i]中和S具有最高相似度的那个,然后输出最高的相似度。S和所有的T[i]都只含有小写字母。 输入规则:先是一行字符串S。第二行是n(1<=n<=100)。第三行以降的n行是n个模式串T[1]...T[n]。S和所有的T[i]的长度都不超过2000. Sample Input:
abcdef 4 acfaff appont emmm bdxeuf Sample Output:
bdxeuf 4 Description:
串abcdef和bdxeuf的最长公共子序列是bdef,长度为4.
*/ #include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=; int result[]; /*
void match(char *a,char *b,int s,int t,int i)
{
int x=s;
int y=t;
while(a[x]!='\0')
{
while(b[y]!='\0')
{
if(a[x]==b[y])
{
result[i]++;
match(a,b,x+1,y+1,i);
cout<<b[y]<<endl;
}
y++;
}
x++;
} }
*/ void match(char *a,char *b,int s,int t,int i)
{
int x=;
for(s=;a[s]!='\0';s++)
{
for(t=x;b[t]!='\0';t++)
{
if(a[s]==b[t])
{
result[i]++;
x++;
//cout<<b[t]<<endl;
break;
}
}
}
} /*
bool compare(int a,int b)//降序为>
{
return a>b;
}
*/
int main()
{
char a[M];
char b[][M];
memset(a,'\0',sizeof(a));
int n; while(scanf("%s",&a))
{
memset(b,'\0',sizeof(b));
memset(result,,sizeof(result));
cin>>n;
for(int i=;i<n;i++)
scanf("%s",&b[i]);
for(int i=;i<n;i++)
{
match(a,b[i],,,i);
//cout<<"result:"<<result[i]<<";"<<b[i]<<endl;
}
/*
sort(result,result+n,compare);
cout<<result[0]<<endl;
memset(a,'\0',sizeof(a));
*/
int max=result[];
int max_num=;
for(int i=;i<n;i++)
{
if(result[i]>max)
{
max_num=i;
max=result[i];
}
}
cout<<b[max_num]<<endl<<max<<endl;
memset(a,'\0',sizeof(a));
} return ;
}
代码运行说明:
tz@HZAU
2019/3/7
【C++】子序列匹配问题的更多相关文章
- 洛谷CF264D Colorful Stones(子序列匹配,思维)
洛谷题目传送门 神仙思维题. 对于两个字符串的匹配问题,似乎之前蒟蒻写的HAOI2010最长公共子序列题解中提到的建网格图模型是一种套路? 给一个稍微强一点的样例(把字母换成了ABC) AABCB B ...
- 子序列匹配(search,find_end,search_n)
search 版本一返回[first1,last1-(last2-first2)]中的第一个iterator i,使得满足对于[first2,last2)中的每个iterator j,*(i+(j-f ...
- Codeforces 163A Substring and Subsequence:dp【子串与子序列匹配】
题目链接:http://codeforces.com/problemset/problem/163/A 题意: 给你两个字符串a,b,问你有多少对"(a的子串,b的子序列)"可以匹 ...
- Distinct Subsequences(不同子序列的个数)——b字符串在a字符串中出现的次数、动态规划
Given a string S and a string T, count the number of distinct subsequences ofT inS. A subsequence of ...
- Leetcode 115.不同的子序列
不同的子序列 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数. 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串.(例 ...
- 正则表达式 (C++)
本主题讨论各正则表达式引擎的语法. 正则表达式语法 语法摘要 语义详细信息 匹配和搜索 格式标志 正则表达式语法 元素 元素可以是下列项之一: 一般字符,可匹配目标序列中的相同字符. 通配符“. ...
- java正则表达式语法详解及其使用代码实例
原文地址 译者序(下载代码) 正则表达式善于处理文本,对匹配.搜索和替换等操作都有意想不到的作用.正因如此,正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率. ...
- Java正则表达式中的捕获组的概念及相关API使用
要弄清这三个方法,首先要弄清Java正则表达式中的捕获组的概念.捕获组也就是Pattern中以括号对“()”分割出的子Pattern.至于为什么要用捕获组呢,主要是为了能找出在一次匹配中你更关心的部分 ...
- stl非变易算法(二)
这里接着上篇stl非变易算法(一)进行总结.主要解析算法函数count.count_if.mismatch.equal.search.search_n以及find_end.给出算法函数的实现及測试用例 ...
随机推荐
- 记事本:CSS
css更多的是一种用来修饰HTML的语言 CSS的三种引入方式 1.行内样式:一般不会这样写,如果想选择某一个,可以用之后内部样式中更加详细的选中方式 行内的优先级最高 <p style=&qu ...
- Encode and Decode TinyURL
TinyURL is a URL shortening service where you enter a URL such as https://leetcode.com/problems/desi ...
- JVM--01
---恢复内容开始--- jdk jre jvm 的关系 java7的结构图 java8 jvm内存溢出 jdk /bin 目录下的jconsole java发展历史 oak:用在嵌入式设备上 相 ...
- gerrit和git
1.git Git是什么? Git是目前世界上最先进的分布式版本控制系统. SVN是集中式版本控制系统. Git与svn比较 相同:能记录文件的所有更改记录.这样是为了大量更改后,可以有记录回到过去, ...
- web开篇
一.内容回顾 1.python基础 2.网络编程 3.并发编程 4.前端 5.数据库(MySQL) 二.今日概要 1.了解Web应用程序的本质 2.Django简介及安装使用 三.今日详细 1.最简单 ...
- Intsall The Nessus in you kali linux
1.first you shold download the nessus on the web station the nessus download site url: https://www. ...
- 饮冰三年-人工智能-Python-22 Python初识Django
1:一个简单的web框架 # 导包 from wsgiref.simple_server import make_server #自定义个处理函数 def application(environ,st ...
- 【EasyNetQ】- 发布/订阅模式
EasyNetQ支持的最简单的消息传递模式是发布/ 订阅.这种模式是消除消费者信息提供者的绝佳方式.出版商简单地向全世界说,“这已经发生了”或“我现在有了这些信息”.它不关心是否有人正在倾听,他们可能 ...
- Invalid tld file: "/WEB-INF/tags/xxxt.tld", see JSP 2.2 specification section 7.3.1 for more details
错误描述 在jsp页面引入了自定义的TLD文件的时候,碰到了一个错误 Invalid tld file: "/WEB-INF/tags/xxxt.tld", see JSP 2.2 ...
- LeetCode545.Boundary-of-Binary-Tree
1.头节点为边界节点 2.叶结点为边界节点 3.如果节点在其所在的层中是最左边或最右边,那么也是边界节点. 思路:分成三部分来做:找左边界结点.叶结点.右边界结点. 找左边界结点要遍历root的左子树 ...