求两个字符串的最大公共字串

求两个字符串的最大公共字串

C语言实现:
穷举法:
#include <iostream.h>//穷举法计算最大公共子字符串
#define M 100
typedef struct
{
 char str[M];
 int length;
}seqstring;

int len_link(seqstring p)
{
 int i=0,length=0;
 while(p.str[i]!='\0')
 {
  i++;
  length++;
 }
 return (length);
}

void same(seqstring p,seqstring s)
{
 seqstring r;
 int i=0,l,m,n=0,k;
 while(i<p.length)//用穷举法求最大公共子字符串
 {
  int j=0;
  while(j<s.length)
  {
   if(p.str[i]==s.str[j])//以p为基准
   {
    l=1;
    for(m=1;i+m<p.length&&j+m<s.length&&p.str[i+m]==s.str[j+m];m++)//寻找相等的
    {
     l++;//记录相等字符的个数
    }
    if(l>n)
    {
      k=i;//记录公共字符串的起点位置
      n=l;//记录公共字符串的个数
    }
     j=j+l;
   }
   else
   {
    j++;
   }
   }
    i++;
 }
 if(n>0)
 {
  for(i=0;i<n;i++)
  {
   r.str[i]=p.str[i+k];
   r.length=n;
  }
 }
 else
 {
  cout<<"无!";
 }
  for(i=0;i<n;i++)
  {
  cout<<r.str[i];
  }
 cout<<endl;
}

void main()
{
  seqstring p,s;//结构体
  cout<<"请输入第一个字符串元素:";
  cin>>p.str;
  cout<<"请输入第二个字符串元素:";
  cin>>s.str;
  p.length=len_link(p);
  s.length=len_link(s);
  cout<<"最大公共子串为:";
  same(p,s);
}

java语言实现:

基本思想是从最大字符串开始比较
先选择两个字符串中 较小的一个并以其为基准  然后由大开始向小进行比较 找到的第一个就是最大的。

import java.sql.DriverManager;


public class Abc {

 
   public   static   String   getSubString(String   s1,   String   s2)   {  
    if   (s1.length()   >   s2.length())   {  
    String   temp   =   s1;  
    s1   =   s2;  
    s2   =   temp;  
    }  
    int   n   =   s1.length();  
    int   index   =   0;  
    ok:  for   (;   n   >   0;   n--)   {  
    for   (int   i   =   0;   i   <   s1.length()   -   n   +   1;   i++)   {  
    String   s   =   s1.substring(i,   i   +   n);  
    if   (s2.indexOf(s)   !=   -1)   {  
    index   =     i;  
    break   ok;  
    }  
    }  
    }  
    return   s1.substring(index,   index   +   n);  
    }
  public static void main(String[] args) throws Exception {
   String a="abnajfkabcdefghijklmnkajftwtlkwrejtrewq";
   String b="jljafabcdefghijklmnlkfjieoijjflja";
   
   String result=getSubString(a,b);
   System.out.println("result============="+result);
  
  }
}

你可能感兴趣的:(求两个字符串的最大公共字串)