我有一个字符串列表,对于每个字符串,我都要检查它的字符,和其他字符串的字符是否相同,除了一个字符。
例如,将返回true的检查将是checking
防锁摇
时钟和羊群有一个不同的特点,不多不少。
岩石对凹痕将明显地返回假。
我一直在考虑首先循环遍历列表,然后在列表中使用第二个循环来检查第一个字符串和第二个字符串。
然后使用split("");
创建包含每个字符串的字符的两个数组,然后相互检查数组元素(即,将每个字符串与另一个数组1-1 2-2中的相同位置进行比较等),只要只有一个字符比较失败,则对这两个字符串的检查为真。
无论如何,我有很多字符串(4029),考虑到我目前正在考虑实现的内容,将包含3个循环,每个循环将导致一个立方循环(?),这将需要很长很长的时间与这么多的元素,不是吗?
有没有更简单的方法来做到这一点?或者这个方法实际上能正常工作?或者--希望不能--但是我提出的解决方案中是否存在某种潜在的逻辑缺陷?
多谢了!
5条答案
按热度按时间tzxcd3kk1#
为什么不采取天真的方式呢?
现在你可以用一个二次算法来检查每一个字符串。
esbemjvw2#
假设两个字符串的长度相等
nbnkbykc3#
不确定这是否是最好的方法,但即使两个字符串长度不同,这一方法也能工作。cat & cattp它们只差一个字符p,并且t是重复的。看起来像是O(n)时间的解决方案,使用额外的空间来存放散列表和字符数组。
nwnhqdif4#
假设所有字符串的长度都相同,我想这会有所帮助:
juzqafwq5#
最好的方法是将字符串连接在一起,一个向前,另一个以相反的顺序。然后检查两端匹配的字符,并从中间开始向两端匹配的字符单循环。如果超过2个字符不匹配中断。
如果一个不匹配,则停止并等待下一个完成,如果它到达相同的位置,则它匹配,否则只返回false。