字符串暴力枚举子序列求LCS
题意:
求n个串里的LCS,长度相同时按照字典序排序
solution:
断环为链,二进制枚举子序列,压入vector,按照字典序排序
把出现次数为n的,压入第二个vector
输出最长的第二个vector里最长的序列
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
bool cmp(string a,string b)
{
return a.size()<b.size();
}
int main() {
// ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int n;
while(cin >> n) {
string s;
vector<string>a;
if(n == ) {
cin >> s;
int sz= s.size();
vector<string>xx;
s+=s;
// cout << s << endl;
for(int i = ; i < sz;i++) xx.push_back(s.substr(i,sz));//截取起点为i长度为sz的字串
sort(xx.begin(),xx.end());
for(int i = ; i < xx.size(); i++) cout <<xx[i]<<endl;
cout << xx[] << endl;continue;
} for(int i = ; i < n; i++) {
cin >> s;
int sz = s.size();
s += s;
vector<string>b;
for(int j = ; j < sz; j++){//断环为链
for(int k = ; k < ( << sz); k++) {//用枚举子集来表示序列
string t;
for(int p = ; p < sz; p++) {
if(k & ( << p)) {
t += s[j + p];
}
}
//cout << t << endl;
b.push_back(t);
}
//cout << endl;
}
sort(b.begin(),b.end());
b.erase(unique(b.begin(),b.end()),b.end());//每一个串的子序列按照字典序排序并去重
for(int j = ; j < b.size(); j++) {//把每一个串的子序列加入总的字符串里
a.push_back(b[j]);
}
}
sort(a.begin(),a.end());//按照所有串的子序列
// for(int i = 0; i < a.size(); i++) cout << a[i] <<endl;
int ct = , maxx = ;
vector<string>c,d;
for(int i = ; i < a.size(); i++) {
if(a[i] == a[i- ]) ct++;
else ct = ;
if(ct == n) c.push_back(a[i]),maxx=max(maxx,(int)a[i].size());//n个串里的公共子序列
}
// for(int i = 0; i < c.size(); i++) cout << c[i] <<endl;
if(c.size() == ) {
cout << << endl; continue;
}
for(int i = ; i < c.size(); i++) {
if(c[i].size() == maxx){
cout<<c[i]<<endl;break;
}
}
}
return ;
}
字符串暴力枚举子序列求LCS的更多相关文章
- POJ 3080 Blue Jeans (字符串处理暴力枚举)
Blue Jeans Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21078 Accepted: ...
- Codeforces Round #410 (Div. 2)(A,字符串,水坑,B,暴力枚举,C,思维题,D,区间贪心)
A. Mike and palindrome time limit per test:2 seconds memory limit per test:256 megabytes input:stand ...
- 【转】最长公共子序列(LCS),求LCS长度和打印输出LCS
求LCS的长度,Java版本: public static int LCS(int[]a,int[] b) { int [][]c=new int[a.length+1][b.length+1]; f ...
- UVA 10635 Prince and Princess—— 求LCS(最长公共子序列)转换成 求LIS(最长递增子序列)
题目大意:有n*n个方格,王子有一条走法,依次经过m个格子,公主有一种走法,依次经过n个格子(不会重复走),问他们删去一些步数后,重叠步数的最大值. 显然是一个LCS,我一看到就高高兴兴的打了个板子上 ...
- 聪明的暴力枚举求abcde/fghij=n
目录 前言 一.题目 二.暴力初解 三.优化再解(借鉴bitmap) 总结 前言 枚举如何聪明的枚举?那就是优化啦!下面梳理之前做过的一个暴力枚举的题,想了蛮久最后把它优化了感觉还不错,算是比较聪明的 ...
- Algorithm --> 最长公共子序列(LCS)
一.什么是最长公共子序列 什么是最长公共子序列呢?举个简单的例子吧,一个数列S,若分别是两个或多个已知序列的子序列,且是所有符合条件序列中最长的,则S称为已知序列的最长公共子序列. 举例如 ...
- 最长公共子序列(LCS)、最长递增子序列(LIS)、最长递增公共子序列(LICS)
最长公共子序列(LCS) [问题] 求两字符序列的最长公共字符子序列 问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字 ...
- 【转】动态规划之最长公共子序列(LCS)
[原文链接]最长公共子序列(Longest Common Subsequence,简称 LCS)是一道非常经典的面试题目,因为它的解法是典型的二维动态规划,大部分比较困难的字符串问题都和这个问题一个套 ...
- 【线型DP模板】最上上升子序列(LIS),最长公共子序列(LCS),最长公共上升子序列(LCIS)
BEGIN LIS: 一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的.对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序 ...
随机推荐
- nodeJS中使用mongoose模块操作mongodb数据库
在实际运用中,对于数据库的操作我们不可能一直在cmd命令行中进行操作,一般情况下需要在node环境中来操作mongodb数据库,这时就需要引入mongoose模块来对数据库进行增删改查等操作. 首先, ...
- 【转】在 Delphi 中创建 Linux 守护程序(服务进程)
转自波哥的译文,必须转过来,太有价值了!原文地址在这里.以下为原文内容: 本文译自 原文链接,语言上做了精炼和排版的变更,以便更简洁明了. Delphi 开始支持 Linux 平台为 Delphi 开 ...
- Delphi 类成员的可见性
- zookeeper不停的拒绝client连接
1 自己重建了Zookeeper集群,但是之前的应用依赖的事务是前一个Zookeeper的集群的,所以无法识别,重启一下应用就好了
- C# Winfrom GDI+ 自定义控件
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...
- 【转】char data[0]用法总结
@2019-07-31 struct MyData { int nLen; ]; }; 开始没有理解红色部分的内容,上网搜索下,发现用处很大,记录下来. 在结构中,data是一个数组名:但该数组没有元 ...
- 修改office2019安装位置,自定义安装需要的功能
更新:2019.5.30楼主本人本次重装系统后装office2019再次测试,没有任何问题,没认真看文章,自己胡乱一同操作,导致各种问题的,出了错就就瞎评论,说博主误导人,对你们这种人就是呵呵.左转不 ...
- SQL查询CASE遇上NULL怎么办?
原SQL: case userName when null THEN '空' else '有值' end, 这种写法不好使: 换一种:case when userName is null THEN ...
- win10快速设置环境变量
同时按WIN+R键,打开“运行”对话框,输入sysdm.cpl,按回车键打开“系统属性”. 在系统属性对话框中选择“高级”选项卡.
- GenericJDBCException: could not execute statement 错误解决
"message":"could not execute statement; nested exception is org.hibernate.exception.G ...