两个字符串最长相同部分

/*功能,给出两个字符串,找出一处最长相同的部分*/

char *longestsame(char*,char*);

int main()

{

  char *a = "aaaabbcccc";

  char *b = "bccc";

  char *ret = longestsame(a,b);

  printf("%s\n",ret);

}

char *longestsame(char*a, char* b)

{

  char *longer;

  char *shorter;

  if(strlen(a) > strlen(b))

  {longer = a, shorter = b;}

  else

  { longer = b, shorter = a;}

  unsigned int size = strlen(shorter);

  unsigned int lsize = strlen(longer);

  for(int i = size; i > 1; i--)

  {

    for(int j = 0; j <= size - i; j++)

    {

      for(int k = 0; k <= lsize - i ; k++)

      {

        if(0 == strncmp((shorter+j),(longer+k),i))

        {

           char* st = (char*)calloc(sizeof(char)*i+1,1);

           strncpy(st,shorter+j,i);

           return st;

        }

      }

    }

  }

  return NULL;

}

时间: 2024-11-02 23:25:48

两个字符串最长相同部分的相关文章

获取两个字符串中最长相等的字符串

获取两个字符串中最长相等的字符串 例:"likeyou"和"loveyou" 输出"eyou" 前段时间面试遇到的面试题,当时的想法是首先将字符串拆分成字符数组,然后拿两个数组去做比较,可惜由于基础不是很扎实,当时的for循环比较写成了这个样子 for (int i = 0; i < arrStr1.length; i++) { for (int j = 0; j < arrStr2.length; j++) { if (arrStr

[LeetCode] 583. Delete Operation for Two Strings 两个字符串的删除操作

Given two words word1 and word2, find the minimum number of steps required to make word1 and word2 the same, where in each step you can delete one character in either string. Example 1: Input: "sea", "eat" Output: 2 Explanation: You ne

JavaScript基础 使用+号连接两个字符串

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=ut

获取两个字符串中最大相同子串

2.获取两个字符串中最大相同子串.第一个动作:将短的那个串进行长度一次递减的子串打印. "cvhellobnmtanop" "andefc" 思路: 1,将短的那个子串按照长度递减的方式获取到. 2,将每获取到的子串去长串中判断是否包含,如果包含,已经找到! package tan; class Test { public static String getMaxSubString(String s1,String s2) { String max = "

[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

[小作品][JS][JQuery]求两个字符串的最大公共串

算法大概描述就是,分别用两个字符串作为横坐标和纵坐标建一个矩阵,遇到横竖字符相同的时候把这点的值设成1,否则设成零,最后矩阵中最长的不为零的对角线就是最大子字串. 例如:   m a c h i a 0 1 0 0 0 b 0 0 0 0 0 m 1 0 0 0 0 a 0 1 0 0 0 c 0 0 1 0 0 这样有点问题:建完矩阵还要去找最长对角线,麻烦. 解决方案是:相等时不只把矩阵元素设为“1”,而是设成它左上角的元素值加一. 例如:   m a c h i a 0 1 0 0 0 b

两个字符串中最大相同的子串

/* * 两个字符串中最大相同的子串. *  *  * * 思路: * 1,既然取得是最大子串,先看短的那个字符串是否在长的那个字符串中. * 如果存在,短的那个字符串就是最大子串. * 2,如果不是呢,那么就将短的那个子串进行长度递减的方式去子串,去长串中判断是否存在. * 如果存在就已找到,就不用在找了. */ public class Test2 { public static void main(String[] args) { // TODO 自动生成的方法存根 String s1="

给定两个字符串,获取两个字符串中最大相同的子串

1 package weekpratisce; 2 3 ///给定两个字符串,获取两个字符串中最大相同的子串 4 public class Demo9 { 5 public static void main(String[] args) { 6 String xx = "aaaaaaaaaaddddddd", yy = "45ddddda"; 7 String str = getMaxsubstring(xx, yy); 8 System.out.println(s

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

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