字符串暴力枚举子序列求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),我们可以得到一些上升的子序 ...
随机推荐
- JavaScript 的编译原理
JavaScript 是一门编译语言. JavaScript 的编译是发生在代码执行前的几微米(甚至更短)的事件内,所以 JavaScript 没有其他语言那么多的时间来进行优化. 当 JavaScr ...
- mysql中binglog底层原理分析
binglog 是一个二进制的日志文件,会记录mysql的数据更新或潜在个跟新 (delete from table where id =xxx) 主从复制就是依靠binglog master -sl ...
- MySQL的sql_mode参数之NO_AUTO_VALUE_ON_ZERO对主键ID为0的记录影响
最近遇到一个不合理使用数据库进行项目开发最终导致项目进度受阻的一个问题,某天几位开发人员找到我并告知数据库中某张表数据无法写入,又告知某行记录被删除了,因为被删除的记录对开发框架影响很大,他们已尝试重 ...
- OpenCV_contrib里的Text(自然场景图像中的文本检测与识别)
平台:win10 x64 +VS 2015专业版 +opencv-3.x.+CMake 待解决!!!Issue说明:最近做一些字符识别的事情,想试一下opencv_contrib里的Text(自然场景 ...
- jQuery表单验证正则表达式-简单
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...
- 014.存储过程(sql实例)
--存储过程--GO--先编译,再执行 --1.GO:批处理语句,GO之前作为一个批次发送服务器编译执行 USE master GO CREATE DATABASE TEST_DB GO USE TE ...
- C#中设置double类型数据的小数长度
如果double A=1.5321654:需要将其转换为3位小数,字符串的话A.tostring(".###")就可以,输出的是1.532: 也可以用A.ToString(&quo ...
- solr不是自启动,添加code失败
原文:https://blog.csdn.net/qq_30242987/article/details/100044964 我主要的问题是 conf要复制 configests/sample_t ...
- dynamic类型
dynamic类型在运行时做类型检查 可用于变量类型.方法参数和返回值类型 示例 dynamic person = new Student { Name = "张三", Age = ...
- 如何实现swipe、tap、longTap等自定义事件
前言 移动端原生支持touchstart.touchmove.touchend等事件,但是在平常业务中我们经常需要使用swipe.tap.doubleTap.longTap等事件去实现想要的效果,对于 ...