华为OJ(查找两个字符串a,b中的最长公共子串)

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

详细描述:

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

 

 

接口设计及说明:

 /*****************************************************************************
 Description   : 查找两个字符串a,b中的最长公共子串
 Input Param   : String stringA, 输入字符串A
     String stringB, 输入字符串B               
 Output Param  : 
 Return Value  : 成功返回最大公共子串,失败返回null(如:数据错误)
 *****************************************************************************/
 public static String iQueryMaxCommString(String stringA, String stringB)
 {
     /* 在这里实现功能,将结果填入输入数组中*/ 
     return null;
 }

 


知识点 字符串
运行时间限制 10M
内存限制 128
输入

输入两个字符串

输出

返回重复出现的字符

样例输入 abcdefghijklmnop abcsafjklmnopqrstuvw
样例输出 jklmnop
最大公共子串问题,动态规划解决,这个问题和之前合唱队还有哪道题来着很像。

#include
#include
using namespace std;
int get_lcstring(string,string);
int main(void)
{
	string s1,s2;
	cin>>s1>>s2;
	get_lcstring(s1,s2);
	//system("pause");
	return 0;
}
int get_lcstring(string s1,string s2)
{
	int len1=s1.size();
	int len2=s2.size();	
	int len=max(len1,len2);
	int maxlen=0,index;
	int **cnt=new int*[len1+1];
	for(int i=0;i<=len1;i++)
		cnt[i]=new int[len2+1];
	for(int i=0;i<=len1;i++)
		for(int j=0;j<=len2;j++)
			cnt[i][j]=0;
	for(int i=1;i<=len1;i++)
		for(int j=1;j<=len2;j++)
			if(s1[i-1]==s2[j-1]&&cnt[i][j]maxlen)
						{
							maxlen=cnt[i][j];
							index=i-1;
						}
				}
	for(int i=0;i<=len1;i++)
		delete [] cnt[i];
	delete [] cnt;
	for(int i=maxlen-1;i>=0;i--)
	cout<


你可能感兴趣的:(华为OJ中级)