2017年10月21日普及组 简单单词

本文介绍了一种用于解决字符串前缀匹配问题的算法,通过枚举每个单词并检查其与其他单词之间的公共前缀来确定最短唯一标识符。该算法适用于需要为一系列字符串生成唯一缩写或简称的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述
这里写图片描述

分析
直接依题意枚举,注意:每个单词的前缀长度并不一定相等。

程序:

var
n,i,j,l,k,bz:longint;
a:array[0..100]of string;
s:array[0..100]of longint;

function check(x,y:string;z:longint):longint;
begin
    if copy(x,1,z)<>copy(y,1,z) then exit(0) else exit(1);
end;

begin
    assign(input,'abbreviate.in');
    reset(input);
    assign(output,'abbreviate.out');
    rewrite(output);
    readln(n);
    for i:=1 to n do
    readln(a[i]);
    fillchar(s,sizeof(s),0);
    for i:=1 to n do
    begin
        l:=length(a[i]);
        for k:=1 to l do
        begin
            bz:=0;
            for j:=1 to n do
            if (i<>j)and(check(a[i],a[j],k)=1) then
            begin
                bz:=1;break;
            end;
            if bz=0 then begin s[i]:=k;break; end;
        end;
    end;
    for i:=1 to n do
    writeln(copy(a[i],1,s[i]));
    close(input);
    close(output);
end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值