华为练习--查找两个字符串a,b中的最长公共子串

程序源代码:

#include <iostream>
#include <string>
using namespace std;

void findCommon(string a,string b);

int main()
{

	string a,b;
	getline(cin,a);
	getline(cin,b);
	string temp;
	if(a.length()<b.length())
	{
		temp=a;
		a=b;
		b=temp;
	}
	findCommon(a,b); //a为长字符串,b为短字符串
	return 0;
}

void findCommon(string a,string b) //a为长字符串,b为短字符串
{
 unsigned int len_a=a.length(),len_b=b.length();//两字符串的长度
 unsigned int maxlen=0;//最长公共字符串的长度
 unsigned int maxindex=0; //最长公共字符串的最后一个字符的位置
 for(unsigned int i=b.length()-1;i>1;i--)
 {
	 for(unsigned int j=0;j<=b.length()-i;j++)
	 {
		 string temp;
		 int t=0;
		 temp=b.substr(j,i);
		 t=a.find(temp);
		 if((t!=-1)&&(maxlen<temp.length()))//匹配成功,并进行比较
			 {
				 maxlen=temp.length();
				 maxindex=i+j;
			 }

	 }
 }
 cout<<b.substr(maxindex-maxlen,maxlen)<<endl;
}

程序运行结果:

时间: 2024-10-10 00:17:32

华为练习--查找两个字符串a,b中的最长公共子串的相关文章

查找两个字符串a,b中的最长公共子串

import java.util.Scanner; public class GetCommonStr { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str1 = scan.nextLine(); String str2 = scan.nextLine(); String result = getCommonStr(str1,str2); System.out.pr

【华为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

字符串hash + 二分答案 - 求最长公共子串 --- poj 2774

Long Long Message Problem's Link:http://poj.org/problem?id=2774 Mean: 求两个字符串的最长公共子串的长度. analyse: 前面在学习后缀数组的时候已经做过一遍了,但是现在主攻字符串hash,再用字符串hash写一遍. 这题的思路是这样的: 1)取较短的串的长度作为high,然后二分答案(每次判断长度为mid=(low+high)>>1是否存在,如果存在就增加下界:不存在就缩小上界): 2)主要是对答案的判断(judge函数

两组字符串中的最长公共子串(可包含多个长度相同的最长公共子串)

#include <stdio.h>#include <string.h>main(){int i,j,k,n,h,m=0,count=0,count1=0,count2=0,count3=0;char str1[100], str2[100];int str3[100]; printf("str1:"); gets(str1); printf("str2:"); gets(str2); for(h=0;str1[h]!='\0';h++){

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

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

[URAL-1517][求两个字符串的最长公共子串]

Freedom of Choice URAL - 1517 Background Before Albanian people could bear with the freedom of speech (this story is fully described in the problem "Freedom of speech"), another freedom - the freedom of choice - came down on them. In the near fu

两个字符串最长公共子串的问题

算法的基本思想: 当字符匹配的时候,不是简单的给相应元素赋上1,而是赋上其左上角元素的值加一. 我们用两个标记变量来标记矩阵中值最大的元素的位置,在矩阵生成的过程中来判断 当前生成的元素的值是不是最大的,据此来改变标记变量的值,那么到矩阵完成的时 候,最长匹配子串的位置和长度就已经出来了.===========================================================================程序:#include<string.h> #define

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

import java.util.Scanner; /* 求两个字符串的最长公共子串*/ public class stringDemo {     public static void main(String[] args){      Scanner scanner = new Scanner(System.in);      System.out.println("请输入第一个字符串:");      String str1 = scanner.nextLine();     

求两个字符串最长公共子串(动态规划)

code如下: //Longest common sequence, dynamic programming method void FindLCS(char *str1, char *str2) { if(str1 == NULL || str2 == NULL) return; int length1 = strlen(str1)+1; int length2 = strlen(str2)+1; int **csLength,**direction;//two arrays to recor