思路
我认为本题的难点在于:如何在多个字符串中,找到一组相同的字符
- 将所有字符串倒置,这样可以从首位进行对比,更加方便
- 在每次读入一个字符串的时候,记录下这些字符串里最短的字符串的长度len_min
- for循环,循环次数不超过len_min,每次取出第一个字符串中的第i个字符,然后判断其他的的字符串的第i个字符是否与之相等
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, len_min = 256; // 初始时设字符串最小长度为256,在后续读入字符串时,随时变更大小
char s[100][256]; // 题意:最多100个字符串,每个字符串最多256个字符
scanf("%d", &n);
getchar(); // 这个?
for(int i = 0; i < n; i++) {
gets(s[i]); // 读入字符串
int len = strlen(s[i]);
if(len < len_min) len_min = len; // 每次都在寻找最短的字符串(为了防止后续判断时 数组下标越界
// 将字符串 进行反转,这样可以从i=0开始进行对比 更好识别
for(int j = 0; j < len / 2; j++){
char temp = s[i][j];
s[i][j] = s[i][len - 1 - j];
s[i][len - 1 - j] = temp;
}
}
int cnt = 0; // cnt:相等字符串的 长度计数
for(int i = 0; i < len_min; i++){
char temp = s[0][i]; // 以第一个字符串的第i个字符作为范本
bool flag = true;
for(int j = 1; j < n; j++){ // 对比剩下n-1个字符串的第i位字符
if(s[j][i] != s[0][i]) {
flag = false;
break;
}
}
if(flag) cnt++; // 有一位相同,长度计数+1
}
if(cnt > 0) {
for(int i = cnt; i >= 0; i--) {
printf("%c", s[0][i]);
}
} else {
printf("nai");
}
}