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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Malizhi 中级黑马   /  2016-9-22 22:39  /  2690 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

<找出多个字符串中的最大公共子字符串>
所谓的最大是什么,我理解是进行比较的最大,但是答案给的思路是最长.
答案中只是进行了两个字符串的比较,要是多个的话就没有那么简单了.感觉不严谨.求指点

10 个回复

倒序浏览
不明觉厉顶一个
回复 使用道具 举报
我只是路过,来赚个黑马币~
回复 使用道具 举报
C语言的代码就是这样的

回复 使用道具 举报
C语言100道题里面好像有,写了很久
回复 使用道具 举报
[C] 纯文本查看 复制代码
//找出多个字符串中的最大公共子字符串,如“nbitheimanb”和“itheia”的最大子串是:”ithei”。(C语言)

#import <Foundation/Foundation.h>
#include <string.h>

//检索两个字符是否匹配
int isMatching(char str1, char str2);

//根据范围截取字符串
char* substringWithRange(char *str, int lenth, int x, int y);

//判断字符串是否包含
int containsString(char *str1, int str1Len, char *str2, int str2Len);


int isMatching(char str1, char str2) {
    
    if (str1 == str2) {
        return 1;
    }
    return 0;
}

char* substringWithRange(char *str, int lenth, int x, int y) {

    char *temp = calloc(lenth, sizeof(char));
    
    int index = 0;
    
    while (y > 0) {
        
        temp[index++] = str[x++];//s
        
        y--;
    }
    return temp;
}

int containsString(char *str1, int str1Len, char *str2, int str2Len) {
    
    int index = 0;
    
    for (int i = 0; i < str1Len; i++) {
        
        index = i;
        
        for (int j = 0; j < str2Len; j++) {
            
            if (!isMatching(str1[index], str2[j])) {
                break;
            }else if (j == str2Len - 1) {
                return 1;
            }
            index++;
        }
    }
    
    return 0;
}


int main(int argc, const char * argv[]) {
    
    
    char *str1 = "asihjktwditheimasdw";
    char *str2 = "xxitititheimaxx";
    
    int len1 = (int)strlen(str1);
    int len2 = (int)strlen(str2);
    
    char *str = calloc(len2, sizeof(char));
    
    for (int i = 0; i < len1; i++) {
        
        for (int j = 1 ; j <= len1 - i; j++) {
            
            //截取字符串
            char *temp = substringWithRange(str1, len1, i, j);
            printf("%s\n",temp);
            
            //如果str2字符串包含temp字符串
            if (containsString(str2, len2, temp, (int)strlen(temp))) {
                
                if (str == NULL) {
                    
                    strcpy(str, temp);
                }else {
                   
                    if ((int)strlen(str) < (int)strlen(temp)) {
                        strcpy(str, temp);
                    }
                }
            }
            
            free(temp);
        }
    }
    printf("%s\n",str);
    free(str);
    
    
    return 0;
}

回复 使用道具 举报
OC:先拿出一个字符串,把所有有可能出现的字符串结果截取出来,然后判断其它字符串里面是否包含,如果其它都包含,将这个字符串存到一个临时字符串中,每截取出临时字符串比较一次,找出长度最长的
回复 使用道具 举报
啊?公共字符串?可能要排序后比较吧…
回复 使用道具 举报
啊?公共字符串?可能要排序后比较吧…
回复 使用道具 举报
好像都是我们班的人哟

回复 使用道具 举报
这有毒了  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马