简单
相关标签
相关企业
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: strs = ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: strs = ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
提示:
1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i]如果非空,则仅由小写英文字母组成
题解:
输入用什么方式读入?扫描该如何扫描? 先回答第二个问题,由于一刷的经验,此时扫描是固定y,x纵向扫描下去,所以外层循环是j,内层循环用i。 输入一开始采用gets读取size次,但是会读取到回车符号。 后来采用scanf("%s, )解决了问题。
复习以下gets相关知识,gets是读入缓冲区的字符,包括空格,直到遇到回车时停止,并且把换行读取但是换成'\0'存储。这里面把scanf改成gets会出现问题,是因为一开头的scanf("%d", )会残留一个回车在缓冲区,此时如果直接gets,会把这个回车读进来形成空字符。若在scanf("%d", )后面加一个空的getchar();(读取单个字符函数),即可解决这个问题。但是我最后选择使用scanf直接解决问题。此分析仅为研究学习gets和字符读入用。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[200][200] = {'\0'};
char ans[200] = {'\0'};
int size, i, j, flag = 0;
scanf("%d", &size);
// getchar();
for (i = 0;i <= size - 1;i ++)
{
scanf("%s", &str[i]);
// gets(str[i]);
}
j = 0;
while (j < 200)
{
for (i = 0;i <= size - 1;i ++)
{
if (str[i][j] != '\0' && str[i][j] == str[0][j])
{
flag = 1;
}
else
{
flag = 0;
break;
}
}
if (flag == 0)
{
break;
}
else
{
flag = 0;
ans[j] = str[0][j];
}
j ++;
}
printf("%s", ans);
return 0;
}