⒈横向扫描
①将第1个字符串作为公共前缀
②第2个与第1个比较,公共部分作为前缀
③第3个与新公共前缀比较,以此类推,遍历数组,得出最后公共部分
⒉纵向扫描
遍历所有字符串的每一列,比较相同列上的字符串是否相同,相同则对下一列比较,不同则输出该列前的字符串
横向扫描法 源码
#include<stdio.h>
#include<string.h>
int comparePrefix(const char *str1, const char *str2) {
int minLength = strlen(str1) < strlen(str2) ? strlen(str1) : strlen(str2);
for (int i = 0; i < minLength; ++i) {
if (str1[i] != str2[i]) {
return i;
}
}
return minLength;
}
char* estCommonPrefix(char**strs, int strssize) {
if (strssize == 0) {
return "";
}
char *prefix =strs[0];
int prefixlength=strlen(prefix);
for(int i=1;i<strssize;i++){
prefixlength = comparePrefix(prefix, strs[i]);
if (prefixlength == 0) {
return "";
}
prefix[prefixlength] = '\0';
}
return prefix;
}
int main(){
char*strs[3];
int n=3,i;
for(i=0;i<n;i++){
scanf("%s",&*strs[i]);
}
int strssize = sizeof(strs) / sizeof(strs[0]);
char *prefix = estCommonPrefix(strs, strssize);
printf("%s", prefix);
return 0;
}
纵向扫描法源码
#include<stdio.h>
#include<string.h>
char* estCommonPrefix(char**strs, int strssize) {
if (strssize == 0) {
return "";
}
char *prefix = strs[0];
int prefixlength = strlen(prefix);
for (int i = 1; i < strssize; ++i) {
char *others=strs[i];
int otherslength = strlen(others);
if (otherslength< prefixlength) {
prefixlength =otherslength;
}
for (int j = 0; j < prefixlength; ++j) {
if (prefix[j] != others[j]) {
prefixlength = j;
break;
}
}
if (prefixlength == 0) {
return "";
}
prefix[prefixlength] = '\0';
}
return prefix;
}
int main(){
char*strs[3];
int n=3,i;
for(i=0;i<n;i++){
scanf("%s",&*strs[i]);
}
int strssize = sizeof(strs) / sizeof(strs[0]);
char *prefix = estCommonPrefix(strs, strssize);
printf("%s", prefix);
return 0;
}
家人们觉得有用的话 觉得点赞 评论+关注