题解 | #名字串生成I#

名字串生成I

https://www.nowcoder.com/practice/6544721abdd54f1f938f2a98ac03922a

考察知识点:数组,指针,遍历,字符串

解题分析: 1、首先找到每个字符串的子串

2、判断两个字符串的子串是否相同,不相同就表明两个字符串不能互相组合,返回没有字符的字符串

3、如果构成两个字符串的子串都相同,那么判断其中一个字符串是否能被另外一个字符串整除,可以整除的话短的字符串就是长的字符串的子串

4如果以上可能都不是,那么构成这两个字符串的最长子串就是他们的子串

编程语言:C

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param str1 string字符串 
 * @param str2 string字符串 
 * @return string字符串
 */
#include <stdbool.h>
#include <string.h>
char* gcdOfStrings(char* str1, char* str2 ) {
    char sub1[1000] = {0}, sub2[1000] = {0};
    int len1 = strlen(str1), len2 = strlen(str2);
    int count1 = 0, count2 = 0;

    sub1[count1++] = str1[0];
    for (int i = 1; i < len1; i++) {	// 获取构成str1的子串
        if (str1[i] != str1[0]) {
            sub1[count1++] = str1[i];
        } else {
            break;
        }
    }

    sub2[count2++] = str2[0];
    for (int i = 1; i < len2; i++) {	// 获取构成str2的子串
        if (str2[i] != str2[0]) {
            sub2[count2++] = str2[i];
        } else {
            break;
        }
    }

    if (strcmp(sub1, sub2) != 0) {		// str1和str2构成的子串不相同的话,两个字符串不能互相生成,直接返回没有值的字符串
        memset(str1, 0, len1);
        return str1;
    }

  	// 如果其中某个字符串可以被另外一个字符串的长度整除的话,就表明短的字符串是长的字符串的子串
    if (len1 > len2) {
        if (len1 % len2 == 0) {
            return str2;
        }
    } else {
        if (len2 % len1 == 0) {
            return str1;
        }
    }

  	// 以上的情况都没有可能,那么随便一条字符串的子串就是构成他们的最长子串
    memset(str1, 0, len1);
    strncpy(str1, sub1, count1);

    return str1;
}

面试高频TOP202解析 文章被收录于专栏

采用Java,C,Python等方法去解答面试高频TOP202题目,

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务