n 问题描述
在招投标信息管理系统中,准确匹配和标注机构名称对于文档管理和信息检索至关重要。基于一个预设的机构全程列表,为每条文档信息自动打上机构标签。这一任务在实际操作中面临诸多挑战,尤其是同一机构可能使用多种不同的名称表述方式,包括全称、简称、别称等。例如,同一机构可能在不同的文档中以“中华人民共和国国家发展和改革文员会”、“国家发改委”、“发改委”等不同名称出现。
给定待匹配文档中的机构名称S和包含N个机构全称的列表L,根据本题目的假设定义,输出L中的所有与S匹配的机构全称列表LS。
假设判断机构名称S与L中的一个机构全称Li是否匹配的定义如下:
(1) 计算S和Li的最长公共子序列:即找出S和Li中公有的、最长的汉字序列。这个序列中的汉字不需要在每个机构名称中连续出现,但在两个名称中的顺序必须是一致的。
例如:S=“国家发改委部门”,Li=“中华人民共和国国家发展和改革委员会”,S和Li的最长公共子序列为“国家发改委”。
(2) 计算最长公共子序列长度占S和Li中较短长度的比例。
(3) 如果长度占比大于等于80%,则认为Li与S匹配,并将Li加入到匹配列表LS中;否则,不加入。
提示:1≤N≤100,2≤机构名称长度≤20
n 要求:
完成题目对应的程序模板(OrgNameMatch)中的方法:
String[] match(String name, String[] fullnames);
该方法的入口参数name为给定的机构名称,fullnames为给定的机构全称列表。
最后返回结果为所有匹配的机构全称列表LS
n 样例:
n 样例1:
输入:name=“中国铁路部”,fullnames=[“中国铁路总公司”,“中华铁路集团”,“中国铁路工程集团”]
输出:[“中国铁路总公司”,“中国铁路工程集团”]
解释:给定的别称“中国铁路部”与“中国铁路总公司”和“中国铁路工程集团”的最长公共子序列都是“中国铁路”,相似度都是80%,等于设定的阙值80%。
因此,这两个全称都被视为匹配。而“中华铁建集团”与简称“中国铁路部”的相似度为40%,未达到阙值,不被视为匹配。
样例2:
输入:name = "国家电力", fullnames = ["国家电网公司", "国家电力投资 集团公司“,”国际电力发展公司"]
输出:[“国家电力投资集团公司”]
static String[] match(String name, String[] fullnames) { List<String> ansL = new ArrayList<String>(); for (int i = 0; i < fullnames.length; i++) { char[] keys = name.toCharArray(); double num = 0; for (int j = 0; j < keys.length; j++) { if (fullnames[i].contains(String.valueOf(keys[j]))) { num++; } } if (num / name.length() >= 0.8) { ansL.add(fullnames[i]); } } return ansL.toArray(new String[ansL.size()]); } public static void main(String[] args) { String name = "中国铁路部"; String[] fullnames = {"中国铁路总公司","中华铁路集团","中国铁路工程集团"}; String[] ans = match(name, fullnames); for (int i = 0; i < ans.length; i++) { System.out.print(" " + ans[i]); } System.out.println(); System.out.println("============================================"); name = "国家电力"; String[] fullnames_1 = {"国家电网公司","国家电力投资集团公司", "国际电力发展公司"}; String[] ans_1 = match(name, fullnames_1); for (int i = 0; i < ans_1.length; i++) { System.out.print(" " + ans_1[i]); } System.out.println(); }
标签:匹配,name,fullnames,机构名称,铁路,Li,问题,String From: https://www.cnblogs.com/Alisa-zmj/p/18110184