两个字符串中匹配最大字符串

(实现一)
#include<stdio.h>

  void   main()   
  {   
    int   i,j,start_index;
    char str1[] = "abcdef";
    char str2[] = "acdeg"; 
    char   result[10] ={0};
    int   count   =0;   
    int   tmp_count=0   
    for(i=0;i<strlen(str1);i++)
    {   
      for(j=0,tmp_count=0;str1[i]==str2[j]&&j<strlen(str2);j++,tmp_count++);   
        if(j<strlen(str2)&&tmp_count>count)   
        {   
          count   =   tmp_count;   
          start_index   =   i;   
        }   
      }   
    strncpy(result,str1+start_index,count);  
    printf(result); 
  } 


(实现二)

给出两个字符串,用自己最熟悉的编程语言找出两个字符串中匹配最长的字符串。如:“ascdefd”和“mntrcdefpk”则匹配出的最大字符串为:cdef。

package com.stringSub;

public class SubString {
 
 
 public static void main(String[] args) {
  /*
   * 使用线程,可以启用两个线程进行匹配,一个是从头开始,一个从尾部开始,for循环的界限当然就是中间啦。
   * */
//  GetStringThread thread = new GetStringThread("pm","mncdepk");
//  thread.start();
  
  SubString sub = new SubString();
  String maxStr = sub.SubStr("cdepk", "mncdepk");
  System.out.println(maxStr);
 }
 
public String SubStr(String str1,String str2){
  
  //使用最短的字符串去分割,可以实现效率更优。
  String bigStr = str1.length() > str2.length() ? str1 : str2;
  String smaStr = str1.length() > str2.length() ? str2 : str1;
  String maxStr = "";
  
  //对短的字符串先进行逐个分割。
  for (int i = 0; i < smaStr.length(); i++) {
   String temp = smaStr.substring(i, i + 1);
   if (bigStr.indexOf(temp) != -1) {//如果第一个字符匹配上,则开始往后匹配。
    String temTest = smaStr.substring(i, smaStr.length());
    if (maxStr.length() < temp.length())
     maxStr = temp;
    int k = 1;
    while (k < temTest.length()) {
     k++;
     String strT = temTest.substring(0, k);
     //如果出现匹配不上了,说明增加最后一个字符之后就匹配不上了,那么增加最后一个之前都还能匹配。
     if (bigStr.indexOf(strT) == -1) {
      maxStr = strT.substring(0, k - 1);
      break;
     } else if (k == temTest.length()) {
      /*
       * 如果匹配到最后没有字符串了还是能匹配上,说明从开始进入循环到最后一个字符都能匹配。
       * 其实在这里还可以优化一下程序。就是程序匹配到最后一个字符串了,那么外层的for循环就没必要再做了。
       * */
      if (bigStr.indexOf(temTest) != -1) {
       if (maxStr.length() < temTest.length())
        maxStr = temTest;
      }
     }
    }
   }
  }
  return maxStr;
 }
}

你可能感兴趣的:(thread,编程,优化,String,Class,语言)