我试图找出给定字符串a的一部分是否可以重新排列为给定字符串b(布尔输出)。
因为算法必须最多是o(n),为了简化它,我使用了stringa.retainal(stringb),所以现在我知道stringa和stringb由相同的字符集组成,现在整个任务闻起来像regex。
还有。。读到regex,我现在可能有两个问题(c)。
问题是,通过使用regex或更有效地使用streamapi来发现字符串a的每个字符是否有足够的重复项来覆盖字符串b的每个字符,我是否可能面临获得o(无穷大)的风险?更不用说regex语法是不容易阅读和构建的。
到目前为止,我不能使用排序(任何排序至少是n*log(n))或hashset之类的(因为它消除了两个字符串中的重复项)。
谢谢您。
1条答案
按热度按时间agyaoht71#
你可以使用
HashMap<Character,Integer>
计算第一个字符的每个字符出现的次数String
. 这需要线性时间。然后,每个
Character
第二个String
,找出是否在HashMap
并减少计数器(如果它仍然是正的)。这也需要线性时间,如果您设法减少第二个字符的所有字符的计数器String
,你成功了。