• 寻找最大公共子字符串


    找出两个字符串中最大公共子字符串,如"abccade"、"dgcadde"的最大子串为"cad"

    // 此题用for能控制循环,思路比下面的while更容易看懂

    int GetCommon(char *s1, char *s2, char **r1, char **r2)

    {

    int len1 = strlen(s1);

    int len2 = strlen(s2);

    int maxlen = 0;

    for(int i = 0; i < len1; i++)

    {

    for(int j = 0; j < len2; j++)

    {

    if(s1[i] == s2[j]) //找到了第一个相等的

    {

    int as = i, bs = j, count = 1; // 保存第一个相等的首地址

    while(as + 1 < len1 && bs + 1 < len2 && s1[++as] == s2[++bs]) //查找最大相等长度

    count++;

    if(count > maxlen) //如果大于最大长度则更新

    {

    maxlen = count;

    *r1 = s1 + i;

    *r2 = s2 + j;

    }

    }

    }

    }

    char *maxsubstr(char *str1, char *str2)

    {

    char *p1, *p2, *q1, *q2, *destp;

    char *substr;

    int max = 0, len;

    p1 = str1;

    while (*p1 != '')

    {

    q1 = str2; //每次是从str2的头部开始的

    while (*q1 != '')

    {

    len = 0;

    p2 = p1; q2 = q1;

    while ((*p2 != '') && (*q2 != ''))

    {

    if (*p2 == *q2) //如果有个相同的,则继续查找

    {

    p2++; q2++; len++;

    }

    else

    break;

    }

    if (len > max)

    {

    max = len; destp = p1;

    }

    q1++; // 继续查找str2中的下一个

    }

    p1++; // 以str1中的下一个关键字进行查找

    }

    substr = (char *)malloc(sizeof(char)*max);

    strncpy(substr,destp,max);

    return substr;

    }

  • 相关阅读:
    mysql.pas
    mysql 动态创建(删除)数据库,表
    界面美化(来自网络)
    串口的一点知识(摘抄)
    移位操作
    快速排序
    oracle和sqlserver互訪
    ASP.NET 无法向会话状态服务器发出会话状态请求 错误的解决方法
    去除 word requirements 工具条
    C# 控件预处理键盘命令
  • 原文地址:https://www.cnblogs.com/xmphoenix/p/2257720.html
Copyright © 2020-2023  润新知