A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wxh794708907 中级黑马   /  2015-7-22 22:27  /  982 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

找出多个字符串中的最大公共子字符串,如“nbitheimanb”和“itheia”的最大子串是:”ithei”。
#include <stdio.h>

int main(int argc,const char * argv[]) {
    char a[] = {'n','b','i','t','h','e','i','m','q','n','b'};
    char b[] = {'i','t','h','e','i','q'};
    int A =sizeof(a);
    int B =sizeof(b);
    int l =0;//当前最大长度
    int L =0;//最大长度
    int I = 0;//最大长度的起始位置
    for (int i =0; i < A;  i++) {
        for (int j = 0; j < B; j++) {
            for (int k = 0 ; k + j < B; k++) {
                if (a[k + i] == b[j + k]) {
                    l++;
                }else{
                    if (L < l){
                        L = l;
                        I = i;
                    }
                    l = 0;
                    break;
                }
            }
        }
    }
    for (int i =0 ; i < L; i++) {
        printf("%c",a[I + i]);
    }
    return 0;
}如题 这是那个求最大公共字符串的程序代码 麻烦各位高手给我解答一下思路 我不知道那三个for循环到底是什么意思 谢谢了 给我介绍一下这个程序的代码到底代表什么意思 给我注释一下  感激不尽

3 个回复

正序浏览
wxh794708907 发表于 2015-7-23 18:41
我还是没怎么动  他那几个变量不知道具体是什么意思 有什么作用 没搞懂  例如 k是干嘛的 1是干嘛的 如果 ...

char a[] = {'i','t','i','t','h','e','i','m','q','n','b'};     // 字符串a 的前面两个  字符与b是一样的
char b[] = {'i','t','h','e','i','q'};

for (int i =0; i < A;  i++) {
        for (int j = 0; j < B; j++) {
            for (int k = 0 ; k + j < B; k++)
                if (a[k + i] == b[j + k])
当 i=0   j=0  的时候  那么 i  就是这个单词的首字母  ,接着我们就要看他们下一个字符是不是一样的,于是乎
   第三个循环 就是干这事的   如上多写的字符串中   当i=0    j=0  时   那么  a[k+i]==a[0]   b[j+k]==a[0]
因为  a[0]==b[0]  成立 所以执行     i++;  紧接着 对比   a   b   第二个字母是否一样  k++
                 
回复 使用道具 举报
liusuizuoyou 发表于 2015-7-23 18:11
前面两个fof循环  就类似于二维数组的遍历 ,把每一种有可能是最大 公共单词的组合的第一个字母遍历里出来 ...

我还是没怎么动  他那几个变量不知道具体是什么意思 有什么作用 没搞懂  例如 k是干嘛的 1是干嘛的 如果有时间 你能给我把每一步都分析一下  真心感谢  哈哈
回复 使用道具 举报
前面两个fof循环  就类似于二维数组的遍历 ,把每一种有可能是最大 公共单词的组合的第一个字母遍历里出来。第三个for循环是在 是上面每个遍历出来的结果进行比较 如果字母相等  。就以当前字母为单词首字母,比较下一个字母是否相同 。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马