首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >截断字符串和消除重复项的算法(不区分大小写)

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

Stack Overflow用户
提问于 2015-03-28 14:35:30
回答 1查看 156关注 0票数 1

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

  • 区分大小写
  • 最大字符长度为10

我想转换这些字符串,以便下面的新约束是有效的(而不是以前的约束)

  • 大小写不敏感
  • 最大字符长度5

假设初始字符串集如下所示

代码语言:javascript
复制
city, City, cIty, ciTy, citY, CIty, cITy, ciTY, CITy, cITY, CITY

我有一个部分算法,它将这些字符串映射到以下

代码语言:javascript
复制
cit, cit1, cit2, cit3, cit4, cit5, cit6, cit7, cit8, cit9, cit10

这是通过使用以下逻辑来完成的

  • 将第一个字符串视为公共前缀。
  • 计算其余字符串中的匹配数(不区分大小写的匹配)。在目前的情况下是10
  • 确定后缀所需的字符数。在当前情况下,由于我需要为1到10生成足够的内容,所以需要为后缀保留2个字符。
  • 将公共前缀截断为(最大字符-后缀字符数)。在当前情况下,它是(5-2)i.3字符。
  • 通过连接截断的公共前缀和后缀来生成字符串

使用上述方法,我能够将旧的字符串集映射到新的集合,并满足新的约束条件。

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

假设最初的字符串集是

代码语言:javascript
复制
city, cit1, cit2, City, cIty, ciTy, citY, CIty, cITy, ciTY, CITy, cITY, CITY, 

在这种情况下,由于cit1和cit2已经存在于初始集合中,算法会中断(因为它会生成重复的cit1和cit2)。

有什么办法可以递归地处理这件事吗?

EN

回答 1

Stack Overflow用户

发布于 2015-03-28 14:50:54

我建议你这样做:

代码语言:javascript
复制
for each input string, s
    if (result.contains(s))
        result.add(s)
    else
        do
            s = next(s)
        while (result.contains(s))
        result.add(s);

其中next(s)被定义为

代码语言:javascript
复制
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

next("citY") = "citY0"next("cit45") = "cit46"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29318359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档