题解 | #名字串生成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题目,