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