总结比较公共前缀的算法

思想都在注释里面了

#include<bits/stdc++.h>
#include<iostream>
using namespace std;
const int N =1000;
char bb[N][N]; 
//定义二维数组,方便存储单词,可以把二维数组想象成一个矩阵,就像秦始皇的人列计算机一样
int n1 =0;
int minx =N;
int main()
{
    cin>>n1;
    getchar(); 
    //小白注意啊!在这里你不用这个缓冲一下回车,有你好受的,基础不牢的去看看getchar能吃掉什么数据
    for(int i =0;i < n1;i++)
    {
        cin.getline(bb[i],N); 
        //关于getline的用法为:N为可以向bb[i]中输入的字符数量,最后默认有一个‘\0’,所以用它来处理字符串会很方便
        minx = min(minx,(int)strlen(bb[i]));
        //这里就相对简单了,这么做的原因就是你不可以让你数组中某行的字符串“过载”
        //要有一个适当的范围
    }
    for(int k =0;k < minx;k++)
    {
        bool zhendema = true;//这么做的原因是提升你的if语句机动性,要问为什么这么做??
        //你就按照这个来,老家伙的经验,这样处理很爽就对了,只要涉及判断,这就是个很好的习惯
        for(int j = 0;j < n1;j++)
        {
            if(bb[0][k] != bb[j][k])//这里比较容易看懂,这就是以第一个数组容器中的单词为标准,来往后面比较前缀是否相同
            {
                zhendema = false;
                break;
            }
        }
        if(zhendema)
        {
            printf("%c",bb[0][k]);
        }
        else
        {
            printf("\n");
        }
    }

    return 0;
}

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值