【题目描述】

最近国安人员截获了一份 RB 国的秘密情报, 全文都是经过加密的,每个单 词都很长。破译人员想到先把单词化简一下,方法是把每个单词尽量取短些的前 缀,但所取的前缀不能是其他单词的前缀。 这个任务现在就交给你来完成。

解释:“字符串s1是s2的前缀”意思是把字符串s2的后面去掉某些字符,只保留与s1相同长度的子串,则s1就称为s2的前缀。如:“abc”是“abcaade”和“abc”的 前缀,但不是“abadc”的前缀。

数据范围 单词数 N, 1<=n<=50; 每个单词长度不超过 50;并且都是由小写字母构成。 保证所给单词没有一个单词是另一个单词的前缀。

【输入文件 addreviate.in】

第一行一个整数 N,表示单词的个数。 下面有 N 行,每行一个单词。

【输出文件 addreviate.out】

共 N 行,每行一个单词,是对应上面 N 个单词化简后的单词。

【样例输入】 

样例测试点#1:

3

abc

efg

ijh

样例测试点#2:

3

aac

aad

aae

【样例输出】

样例测试点#1:

a

e

i

样例测试点#2:

aac

aad

aae

思路:这题算是送分题中的高难度题了,对于各位高手来说不是什么问题,我说这题是为了提一下一个库函数,这个库函数是我们一般不经常用的,废话不多说,我先从头讲起吧

这题要求我们保留n个字符串的前缀,使得这些前缀和其他前缀不相同,缩小存储空间,看起来很简单,其实还是有点复杂滴

例如题目中给的样例:可以先把第一个字符按照图中红线分段,提取第一行第一个字符,来和下面的每一个字符串进行对比,如果这个段并不在下面任何一个字符串中是前缀,就可以在后面加上个'\0'表示截取这一段

之后对每一行都采取这样的措施,就可以实现保留前缀

代码如下:

 #include <stdio.h>
#include <string.h>
int main()
{
//freopen("addreviate.in","r",stdin);
//freopen("addreviate.out","w",stdout);
char a[][],temp;
int n;
int i,j,k;
int flag,len;
scanf("%d",&n);
for(i=;i<n;i++)
{
scanf("%s",a[i]);
}
for(i=;i<n;i++)
{
len=strlen(a[i]);//测一下a[i]的长度
for(k=;k<len;k++)//扫描整个子串
{
temp=a[i][k];//记录一下当前字符
a[i][k]='\0';//当前标记为空
for(j=;j<n;j++)
{
if(i!=j&&(strstr(a[j],a[i])-a[j])==)//如果不是同一行,并且这个子串与这个字符串的前面一部分吻合,就可以停止了
{
break;//停止!!
}
}
if(j>=n)//这个空的位置前面一段保证前缀不重复,就可以标记为空了
{
a[i][k]='\0';
break;
}
else//否则还要还原回去,继续寻找下一位
{
a[i][k]=temp;
}
}
}
for(i=;i<n;i++)
{
printf("%s\n",a[i]);
}
return ;
}

最新文章

  1. .NET Core 跨平台发布(dotnet publish)
  2. bzoj1023: [SHOI2008]cactus仙人掌图
  3. android基础(三)ContentProvider
  4. SQL中的charindex()方法
  5. js获取项目根路径
  6. Oracle Job相关
  7. 当list中有中文,打印的时候显示为字符编码的问题
  8. winform窗体中查找控件
  9. php正则表达式图谱
  10. FFT算法
  11. BZOJ 3083: 遥远的国度(树链剖分+DFS序)
  12. riot.js教程【三】访问DOM元素、使用jquery、mount输入参数、riotjs标签的生命周期
  13. 文本域、bootstrap-table显示以及MySQL三者间的换行符问题
  14. 对于ArrayList中的泛型进行分析
  15. 基于Android的高校饮水宝app
  16. 深度学习之 TensorFlow(四):卷积神经网络
  17. C# WPF开发之MVVM模式开发
  18. C51单片机_day_01(定时器和中断系统)
  19. JPA的初级CRUD-01
  20. 利用os.system 截取终端日志输出 存为txt

热门文章

  1. SZU:A26 Anagram
  2. Js 数组(一):基础应用
  3. sqlite3结合ios开发
  4. c/c++操作访问数据,是堆中的数据快还是栈中的数据快
  5. 职责链(Chain of Responsibility)模式
  6. Effective C++ 读书总结
  7. 《12个有趣的C语言问答》评析2
  8. EntityFrame Work 5 性能注意事项(转自MSDN)
  9. SQL Server 2008 维护计划实现数据库备份
  10. .NET Mvc Razor