用Java

时间:2018-12-06 09:31:31

标签: java string character

我正在尝试查找给定字符串A的一部分是否可以重新排列为给定字符串B(布尔输出)。
由于算法必须最多为O(n),为了简化它,我使用了stringA.retainAll(stringB),所以现在我知道字符串A和字符串B由相同的字符集组成,并且整个任务的气味都类似于regex。
还有..阅读有关正则表达式的信息,我现在可能遇到两个问题(c)。
问题是,为了查找字符串A的每个字符是否具有足够的重复量来覆盖字符串B的每个字符,我是否可能面临通过使用正则表达式或更有效地使用StreamAPI来获取O(infinity)的风险?更不用说正则表达式语法不易阅读和构建。
到目前为止,我无法使用排序(任何排序至少为n * log(n))或哈希集之类的东西(因为它消除了两个字符串中的重复项)。
谢谢。

1 个答案:

答案 0 :(得分:3)

您可以使用HashMap<Character,Integer>来计数第一个String中每个字符的出现次数。这将花费线性时间。

然后,对于第二个Character中的每个String,查找它是否在HashMap中,并递减计数器(如果它仍然为正)。这也将花费线性时间,如果您设法减少第二个String的所有字符的计数器,您将成功。