当前位置: 首页 > 面试题库 >

检查字符串是否由唯一字符组成的最简单方法?

孟振
2023-03-14
问题内容

我需要检查Java中的单词是否包含唯一字母(不区分大小写)。由于直接的解决方案很无聊,所以我想到了:

  1. 对于字符串中的每个字符,请检查是否indexOf(char) == lastIndexOf(char)
  2. 将所有字符添加到HashSet并检查是否设置了大小==字符串长度。
  3. 将字符串转换为char数组,按字母顺序排序,遍历数组元素并检查是否为c[i] == c[i+1]

目前,我最喜欢#2,似乎是最简单的方法。还有其他有趣的解决方案吗?


问题答案:

我不喜欢1.-这是O(N 2)算法。您的2.大致是线性的,但始终遍历整个字符串。您的3.是O(N lg 2 N),(可能)有一个相对较高的常数-
可能几乎总是比2慢。

但是,我的首选是,当您尝试将字母插入集合中时,检查它是否已经存在,如果已经存在,则可以立即停止。给定字母的随机分布,平均应该只扫描一半的字符串。

编辑:这两个评论都是正确的,您希望扫描的字符串的确切部分将取决于分布和长度-
在某些时候,字符串足够长以至于不可避免的重复,并且(例如)缺少一个字符那个机会仍然很高。实际上,给定平坦的随机分布(即,集合中的所有字符均具有相同的可能性),这应与生日悖论紧密吻合,这意味着发生碰撞的机会与字符中可能出现的字符数的平方根有关。字符集。举例来说,如果我们假设基本US-
ASCII(128个字符)具有相同的概率,则在大约14个字符处发生冲突的可能性为50%。当然,在实际的字符串中,我们可能会比它早一些,因为ASCII字符不是’



 类似资料:
  • 问题内容: 一种有效的方法来检查Python中的字符串是否仅包含一个字符,例如?像这样的行为: 两种看似效率低下的方法是:首先将字符串转换为列表并检查每个元素,其次使用正则表达式。有没有更有效的方法,或者这些是Python中最好的方法?谢谢。 问题答案: 到目前为止,这是最快的,甚至比它快几倍,只需使用出色的mgilson计时套件即可: 在这里,所有检查都是在Python C代码中完成的,它只是:

  • 问题内容: 基本上,我大约有1,000,000个字符串,对于每个请求,我都必须检查一个String是否属于列表。 我担心性能,最好的方法是什么??哈希? 问题答案: 最好的选择是使用并通过方法检查集合中是否存在字符串。建立HashSet可以通过使用Object方法和进行快速访问。状态的Javadoc : 此类为基本操作(添加,删除,包含和调整大小)提供了恒定的时间性能, HashSet 将对象存储

  • 我想删除字符串末尾的所有数字和符号。得到: 我可以剥离数字,但不能剥离。我该怎么做? 这是我到目前为止的代码:

  • 问题内容: 如何检查是否是那里的? 我想分配给是否有结果,否则。 我当前的代码是: 问题答案:

  • 代码非常简单。它会检查所有字符一次,并替换第一次出现的字符。然而,输入=“aab”失败。我不知道为什么。编程语言是java。 编辑 我改了密码。现在它抛出了一个输入错误 错误: 线程“main”java中出现异常。util。正则表达式。PatternSyntaxException:索引1附近的未关闭组(^at java.util.regex.Pattern.error,Pattern.java:1

  • rank ▲ ✰ vote url 41 487 108 705 url 检查一个字符串是否是一个数字 如果一个字符串可以被看做一个数字那么有什么好的方法可以检测出来? 我能想到的方法: def is_number(s): try: float(s) return True except ValueError: return Fals

  • 问题内容: 给定一个字符c和一个数字n,我如何创建一个包含n个重复c的字符串?手动执行此操作太麻烦了: 当然,已经有一些静态库函数为我完成了这项工作? 问题答案:

  • 例如: 字符串1=helloworld字符串2=asdfuvjerhelloworld 这应该是真的。 另一个例子:字符串1=helloworld字符串2=lshewodxzr 这也应该是真的。 所以我正在研究如何创建一个方法,它将返回一个布尔值,检查第二个字符串是否包含第一个字符串中的字母。在第二个示例中,string2只有一次字母l,尽管字母l在string1中出现了三次,但仍然返回true。