在最近的一次采访中得到了这个问题。基本字符串比较一点点扭曲。我有一个输入字符串STR1 = 'ABC'
。当要比较的字符串时,我应该返回“相同/相似”,STR2具有这些值中的任何一个 - “ACB”'BAC''ABC''BCA''CAB''CBA'(这是相同的字符,相同的长度和相同的no事件)。当时唯一的答案是继续进行“合并排序”或“快速排序”,因为它的复杂性是对数的。还有其他更好的算法来实现上述结果吗?
答案 0 :(得分:4)
对两者进行排序,并比较结果是否相等,对于合理长度的字符串来说并不是一个糟糕的方法。
另一种方法是使用从字符到出现次数的地图/字典/对象(取决于语言)。然后迭代第一个字符串,递增计数,并迭代第二个字符串,递减它们。一旦收到负数,您就可以返回false
。
如果您的可能字符集小到足以被认为是常量,那么您可以使用数组作为" map",从而导致O( n )最坏情况复杂性。
答案 1 :(得分:0)
假设您可以使用任何语言,我会选择python'字典'解。您可以使用2个字典作为每个字符串字符的键。然后你可以比较字典并返回相应的结果。这实际上适用于具有多次出现的字符的字符串。