Java 截断字符串并消除重复项的算法(不区分大小写)

Java 截断字符串并消除重复项的算法(不区分大小写),java,regex,string,algorithm,Java,Regex,String,Algorithm,我有一组满足以下约束的字符串 区分大小写 最大字符长度为10 我想转换这些字符串,以便以下新约束有效,而不是以前的约束 不区分大小写 最大字符长度为5 假设初始字符串集如下所示 city, City, cIty, ciTy, citY, CIty, cITy, ciTY, CITy, cITY, CITY 我有一个局部算法将这些字符串映射到 cit, cit1, cit2, cit3, cit4, cit5, cit6, cit7, cit8, cit9, cit10 这是通过使用以下逻辑实

我有一组满足以下约束的字符串

区分大小写 最大字符长度为10 我想转换这些字符串,以便以下新约束有效,而不是以前的约束

不区分大小写 最大字符长度为5 假设初始字符串集如下所示

city, City, cIty, ciTy, citY, CIty, cITy, ciTY, CITy, cITY, CITY
我有一个局部算法将这些字符串映射到

cit, cit1, cit2, cit3, cit4, cit5, cit6, cit7, cit8, cit9, cit10
这是通过使用以下逻辑实现的

将第一个字符串作为公共前缀 计算其余字符串中不区分大小写的匹配数。在目前的情况下是10 确定后缀所需的字符数。在当前的情况下,因为我需要为1到10生成足够的字符,所以我需要为后缀保留2个字符 将公共前缀截断为Max characters-后缀的字符数。在当前情况下,它是5-2,即3个字符 通过连接截断的公共前缀和后缀生成字符串 使用上述方法,我能够将旧字符串集映射到新字符串集并满足新约束

但是,如果原始集合本身有算法生成的任何字符串,则我的算法将中断

假设初始字符串集为

city, cit1, cit2, City, cIty, ciTy, citY, CIty, cITy, ciTY, CITy, cITY, CITY, 
在这种情况下,由于初始集中已经存在cit1和cit2,因此算法会中断,因为它会生成重复的cit1和cit2


有什么方法可以递归地处理这个问题吗

我建议你做以下事情:

for each input string, s
    if (result.contains(s))
        result.add(s)
    else
        do
            s = next(s)
        while (result.contains(s))
        result.add(s);
其中nexts将被定义为

split s into [prefixPart, numberPart]
num = numberPart == null ? 0 : numberPart+1
prefixLength = Math.min(prefixPart.length, 5 - num.length)
return prefixPart.substring(0, prefixLength) + num

i、 e.nextcitY=citY0和nextcit45=cit46

从得到的字符串集中,您想要得到什么还不清楚。从技术上讲,你可以将输入映射到1,2,3,…,不?是的。。但目的是尽可能多地保留上下文,即截断前缀提供一些上下文。实际上我有多组字符串,比如city,city,国家,国家,。。。。这里需要的地图是城市,城市1。。。国家,国家1,。。。此外,仅映射到字符串1、2、3等并不能解决问题。原始集合本身可以包含1,2,3,但是那些1,2,3当然可以变成17,18,19。还是有另一个潜在的约束?