黑马程序员技术交流社区

标题: 总是感觉这个点招题不严谨呢 [打印本页]

作者: Malizhi    时间: 2016-9-22 22:39
标题: 总是感觉这个点招题不严谨呢
<找出多个字符串中的最大公共子字符串>
所谓的最大是什么,我理解是进行比较的最大,但是答案给的思路是最长.
答案中只是进行了两个字符串的比较,要是多个的话就没有那么简单了.感觉不严谨.求指点
作者: 鸡蛋不吃黄    时间: 2016-9-22 22:51
不明觉厉顶一个
作者: 朱儿008    时间: 2016-9-22 23:32
我只是路过,来赚个黑马币~
作者: 自在熊    时间: 2016-9-24 16:14
C语言的代码就是这样的


作者: 自在熊    时间: 2016-9-24 16:15
C语言100道题里面好像有,写了很久
作者: 自在熊    时间: 2016-9-24 16:29
[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;
}


作者: 邱中林    时间: 2016-9-24 22:25
OC:先拿出一个字符串,把所有有可能出现的字符串结果截取出来,然后判断其它字符串里面是否包含,如果其它都包含,将这个字符串存到一个临时字符串中,每截取出临时字符串比较一次,找出长度最长的
作者: 小鱼闯江湖    时间: 2016-9-24 23:38
啊?公共字符串?可能要排序后比较吧…
作者: 小鱼闯江湖    时间: 2016-9-24 23:40
啊?公共字符串?可能要排序后比较吧…
作者: 小鱼闯江湖    时间: 2016-9-24 23:42
好像都是我们班的人哟


作者: changfa    时间: 2016-9-24 23:46
这有毒了  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2