【发布时间】:2018-12-06 09:31:31
【问题描述】:
我正在尝试查找给定字符串 A 的一部分是否可以重新排列为给定字符串 B(布尔输出)。
由于算法必须最多为 O(n),为了简化它,我使用了 stringA.retainAll(stringB),所以现在我知道字符串 A 和字符串 B 由相同的字符集组成,现在整个任务闻起来像正则表达式。
而且.. 阅读正则表达式,我现在可能遇到两个问题(c)。
问题是,我是否可能面临通过使用正则表达式获得 O(infinity) 的风险,或者更有效地使用 StreamAPI 来查找字符串 A 的每个字符是否有足够的重复项来覆盖字符串 B 的每个字符?更不用说正则表达式语法不容易阅读和构建。
截至目前,我不能使用排序(任何排序至少为 n*log(n)),也不能使用哈希集等(因为它消除了两个字符串中的重复项)。
谢谢。
【问题讨论】:
-
Acc to stackoverflow.com/questions/24754881/… retainAll is O(n)
-
只在
HashSet,但你说你不能使用哈希。 -
@talex 没错,使用哈希消除了每个字符的出现次数。如果字符串 B 中有一个字符出现的次数多于字符串 B 中的对应字符,则 Hashset 将返回 true,但实际上为 false。