每日一言
什么都不用想,干脆把自己交给生活。不用担心,生活自会把你冲到彼岸,立定脚跟的。
题目
题目链接:检查两个字符串数组是否相等
解题思路
法一:
字符串拼接法
首先,创建两个字符数组 str1 和 str2,分别用于存储拼接后的字符串。
将 str1 和 str2 数组初始化为空,并且长度为 1001。
进入第一个 for 循环,遍历 word1 字符串数组,通过 strcat 函数将每个字符串依次拼接到 str1 数组中。
进入第二个 for 循环,遍历 word2 字符串数组,通过 strcat 函数将每个字符串依次拼接到 str2 数组中。
对 str1 和 str2 数组进行字符串的比较,使用 strcmp 函数,如果返回值等于 0,表示两个字符数组相同,即两个字符串数组相同,返回 true;否则,返回 false。
法二:
使用双指针法,
首先,我们通过创建指针 p1 和 p2 分别指向 word1 和 word2 的首个元素,来处理字符串数组。
创建四个变量 i1、j1、i2、j2 分别用于追踪 p1 和 p2 当前位置的索引。
进入一个循环,在循环中进行以下操作:
每次循环开始时,检查当前位置的字符是否相同,即 p1[i1][j1] 是否等于 p2[i2][j2]。如果不相同,说明两个字符串数组不相同,返回 false。
将 j1 递增,以便追踪下一个字符。
如果 p1[i1][j1] 的值为 ‘\0’,说明已经处理完了当前字符串,需要开始处理下一个字符串,将 i1 递增、j1 重置为 0。
将 j2 递增,以便追踪下一个字符。
如果 p2[i2][j2] 的值为 ‘\0’,说明已经处理完了当前字符串,需要开始处理下一个字符串,将 i2 递增、j2 重置为 0。
当前位置的字符相同,且还未处理完两个字符串数组中的所有字符串时,继续进行下一次循环。
循环结束后,检查是否已经处理完了两个字符串数组中的所有字符串,即 i1 == word1Size 和 i2 == word2Size 是否成立。如果成立,说明两个字符串数组相同,返回 true;否则,返回 false。
代码
法一:
bool arrayStringsAreEqual(char** word1, int word1Size, char** word2, int word2Size) {
char str1[1001] = {0};
char str2[1001] = {0};
for(int i=0;i<word1Size;i++)
strcat(str1,word1[i]);
for(int i=0;i<word2Size;i++)
strcat(str2,word2[i]);
return (strcmp(str1,str2) == 0);
}
法二:
bool arrayStringsAreEqual(char** word1, int word1Size, char** word2, int word2Size) {
char** p1 = word1;
char** p2 = word2;
int i1 = 0;
int j1 = 0;
int i2 = 0;
int j2 = 0;
while(i1 < word1Size && i2 < word2Size) {
if(p1[i1][j1] != p2[i2][j2]) {
return false;
}
j1++;
if(p1[i1][j1] == '\0') {
i1++;
j1 = 0;
}
j2++;
if(p2[i2][j2] == '\0') {
i2++;
j2 = 0;
}
}
return i1 == word1Size && i2 == word2Size;
}
结语
请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!
都看到这里啦!真棒(*^▽^*)
可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家
编程小白写作,如有纰漏或错误,欢迎指正