最长公共子串_暴力解法(不会正解)

最长公共子串 lcs.cpp/.in/.out

计算两个字符串的最大公共子串(Longest Common Substring)的长度,字符不区分大小写,这里的最大公共子串要求的字串是连续的。

输入:

两行,每行一个字符串,字符串长度<=1000.

输出:

输出一个整数,表示公共子串的长度。

样例输入:

asdfas

werasdfaswer

样例输出:

6

下面上代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char o[300],k[300];
 4 int main()
 5 {
 6 //    freopen("lcs.in","r",stdin);
 7 //    freopen("lcs.out","w",stdout);
 8     scanf("%s",&o);
 9     scanf("%s",&k);
10     int long_1=0,long_2=0;
11     while(o[long_1]!=‘\0‘)
12     {
13         long_1++;//数组长度(1)
14     }
15     while(k[long_2]!=‘\0‘)
16     {
17         long_2++;//数组长度(2)
18     }
19     int maxx=0;
20     for(int u=0;u<long_1;u++)//第一个数组的初始位置
21     {
22         for(int u2=0;u2<long_2;u2++)//第二个数组的初始位置
23         {
24             if(o[u]==k[u2])//如果初始位置处相同,就往后while循环找最长的相同长度
25             {
26                 int now_long=1;
27                 while(o[u+now_long]!=‘\0‘&&k[u2+now_long]!=‘\0‘&&(o[u+now_long]==k[u2+now_long]||o[u+now_long]+‘A‘-‘a‘==k[u2+now_long]||o[u+now_long]-‘A‘+‘a‘==k[u2+now_long]))//判断是否到行尾以及是否大小写
28                 {
29                     now_long++;//如果相同
30                 }
31                 maxx=max(maxx,now_long);//长度更新
32             }
33         }
34     }
35     cout<<maxx;
36 }

原文地址:https://www.cnblogs.com/OI-xyf/p/10321211.html

时间: 2024-10-16 04:05:14

最长公共子串_暴力解法(不会正解)的相关文章

动态规划之最长公共子串

一 问题引入 在生物学中,经常需要比较两个不同生物的DNA,一个DNA串由由一串称为碱基的的分子组成,碱基有鸟嘌呤,腺嘌呤,胞嘧啶,胸腺嘧啶四中,我们用英文字母的首字母表示四种碱基,那么DNA就是在有限集{A,C,G,T}上的一个字符串.例如某种生物的DNA序列为:S1=ACCGGTCGAGTGCGCGGAAGCCGGCCGAA,S2=GTCGTTCGGAATGCCGTTGCTCTGTAAA,我们比较两个DNA串的原因就是希望确定他们的相似度,作为衡量两个物种相似度的标准.如果一个串是另外一个串

lintcode 中等题:longest common substring 最长公共子串

题目 最长公共子串 给出两个字符串,找到最长公共子串,并返回其长度. 样例 给出A=“ABCD”,B=“CBCE”,返回 2 注意 子串的字符应该连续的出现在原字符串中,这与子序列有所不同. 解题 注意: 子序列:这个序列不是在原字符串中连续的位置,而是有间隔的,如:ABCDE  和AMBMCMDMEM 最长公共子序列是ADCDE 子串:子串一定在原来字符串中连续存在的.如:ABCDEF 和SSSABCDOOOO最长公共子串是ABCD 参考链接,讲解很详细 根据子串定义,暴力破解 public

利用后缀数组(suffix array)求最长公共子串(longest common substring)

摘要:本文讨论了最长公共子串的的相关算法的时间复杂度,然后在后缀数组的基础上提出了一个时间复杂度为o(n^2*logn),空间复杂度为o(n)的算法.该算法虽然不及动态规划和后缀树算法的复杂度低,但其重要的优势在于可以编码简单,代码易于理解,适合快速实现. 首先,来说明一下,LCS通常指的是公共最长子序列(Longest Common Subsequence,名称来源参见<算法导论>原书第3版p223),而不是公共最长子串(也称为最长公共子串). 最长公共子串问题是在文本串.模式串中寻找共有的

[PHP]算法-最长公共子串的PHP实现

最长公共子串问题: 给定两个字符串,求出它们之间最长的相同子字符串的长度. 暴力解法思路: 1.以两个字符串的每个字符为开头,往后比较,这样就会需要两层循环 2.两层循环内部的比较方式,也是一层循环,以当前字符为起点,往后遍历比较,直到有不同就跳出这次循环,记录下相同子字符串的长度 3.以最长的那次长度为准,因此也就是有三层循环.时间复杂度O(n^3) longest=0 for i=0;i<str1.size;i++ for j=0;j<str2.size;j++ m=i n=j lengt

POJ 2774 最长公共子串

对于最长公共子串,n*m的递推显然无法通过本题. 本题是后缀数组的一个基础应用,字符串的子串可以视作后缀的前缀. 我们在两个串间插入一个不在字符集的字符如'#'作为连接,这样做的目的是为了防止两个后缀的最长公共前缀跨过第一个字符串的末尾. 扫描Height数组,如果排名为i的字符串与排名为i-1的字符串来源于原来的2个串,则更新答案最大值. 1 #include <iostream> 2 #include <vector> 3 #include <algorithm>

求两个字符串最长公共子串

一.问题描述: 最长公共子串 (LCS-Longest Common Substring) LCS问题就是求两个字符串最长公共子串的问题.比如输入两个字符串"ilovechina"和“chinabest”的最长公共字符串有"china",它们的长度是5. 二.解法 解法就是用一个矩阵来记录两个字符串中所有位置的两个字符之间的匹配情况,若是匹配则为1,否则为0.然后求出对角线最长的1序列,其对应的位置就是最长匹配子串的位置.如下图: i   l   o  v  e  

最长递增子序列 &amp;&amp; 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离

http://www.cppblog.com/mysileng/archive/2012/11/30/195841.html 最长递增子序列问题:在一列数中寻找一些数,这些数满足:任意两个数a[i]和a[j],若i<j,必有a[i]<a[j],这样最长的子序列称为最长递增子序列. 设dp[i]表示以i为结尾的最长递增子序列的长度,则状态转移方程为: dp[i] = max{dp[j]+1}, 1<=j<i,a[j]<a[i]. 这样简单的复杂度为O(n^2),其实还有更好的方

【华为OJ】【081-查找两个字符串a,b中的最长公共子串】

[华为OJ][算法总篇章] [华为OJ][081-查找两个字符串a,b中的最长公共子串] [工程下载] 题目描述 查找两个字符串a,b中的最长公共子串 输入描述 输入两个字符串 输出描述 返回重复出现的字符 输入例子 abcdefghijklmnop abcsafjklmnopqrstuvw 输出例子 jklmnop 算法实现 import java.util.Scanner; /** * Author: 王俊超 * Date: 2016-01-04 08:43 * Declaration: A

寻找最长公共子串的问题

问题:现在有两个字符串,我们要寻找它们最长的公共子串.比如regression和express这两个字符串,它们的子串有e和ress,那么它们的最长公共字串就是ress. 解法: 我们利用一个二维数组来记录两个字符串相互匹配的情况,如果字符串str1长度为len1,字符串str2长度为len2,那么数组可以设为table[len1][len2]. 对于数组中的每个元素table[i][j],当字符串对应位置的值一致时(str1[i] == str2[j])为1,不一致时为0.当全部对比完成之后,