【1077】Kuchiguse (20 分)

简介: 【1077】Kuchiguse (20 分)【1077】Kuchiguse (20 分)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
using namespace std;  
求N个字符串公共后缀,先都反转再遍历
tips:注意不要刚好开256大小,不够,开到300好了,char数组最后一个是存/0的!!!
int n,minLen=300,ans=0;
char s[100][300]; //至多100个字符串,每个字符串至多256个字符
int main(){   
  scanf("%d",&n);  //n是字符串个数
  getchar();  //接收换行符
  for(int i=0;i<n;i++){ 
    cin.getline( s[i],300 );  //算笔上是gets,此处注意下格式
    int len=strlen(s[i]);
    if(len < minLen) minLen =len;  //取最小长度
    for(int j=0; j<len/2; j++){  //反转字符串s[i],转化为求公共前缀
      char temp=s[i][j]; //交换str[i]与str[len-i-1]
      s[i][j]=s[i][ len-j-1 ]; 
      s[i][ len-j-1 ]=temp;  
    }
  }
  for(int i=0; i<minLen ;i++){ //判断所有字符串的第i个字符是否全部相等
    char c=s[0][i];  //取第一个字符串的第i个字符
    bool same=true;
    for(int j=1;j<n;j++){  //判断其余字符串中的第i个字符是否等于c
      if(c != s[j][i] ){  //只要有一个不相等,就停止枚举,说明公共前缀到此为止
        same=false;
        break;
      }
    }
    if(same) ans++;  //若所有字符串中的第i位相等,则计数器ans加1
    else break;
  }
  if(ans){ 
    for(int i=ans-1;i>=0;i--){ 
      printf("%c", s[0][i] );
    }
  }else {
    printf("nai");  //不存在公共前缀
  }
  system("pause");
    return 0;   
}
相关文章
|
6月前
1071 小赌怡情 (15 分)
1071 小赌怡情 (15 分)
|
6月前
1002 A+B for Polynomials (25 分)
1002 A+B for Polynomials (25 分)
L2-1 包装机 (25 分)
L2-1 包装机 (25 分)
154 0
L2-1 包装机 (25 分)
|
C语言 C++
1086 就不告诉你 (15 分)
做作业的时候,邻座的小盆友问你:“五乘以七等于多少?”你应该不失礼貌地围笑着告诉他:“五十三。”本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积。
357 0
1086 就不告诉你 (15 分)
|
C语言 C++
L1-4 寻找250 (10 分)
对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。
768 0
L1-4 寻找250 (10 分)
1002. A+B for Polynomials(25分)
1002. A+B for Polynomials(25分)
69 0
L1-030 一帮一 (15 分)
L1-030 一帮一 (15 分)
131 0
L1-055 谁是赢家 (10 分)
L1-055 谁是赢家 (10 分)
113 0
L1-054 福到了 (15 分)
L1-054 福到了 (15 分)
145 0
L1-059 敲笨钟 (20 分)
L1-059 敲笨钟 (20 分)
128 0