假设我有以下两个字符串:
string s1 = // some string
string s2 = //某个字符串
如何有效地检查s1是否与s2的区别仅为1个字母? (如果s1长度== s2长度)
如何通过插入一个字母来有效地检查s1是否与s2不同?
如何有效地检查s1与s2的区别是否与1删除了一个字母?
如何有效地检查s1的字母是否可以连续配对并换成s12的相等内容?
答案 0 :(得分:2)
对于第一个问题,请考虑迭代每个字母对,并保持字母对的数量不同。如果您的总计数等于1,则满足条件。 (例如,使用for(int i = 0; i < s1.length(); ++i)
)
对于第二个问题,首先检查是否s1.length() == s2.length() + 1
。然后,迭代字母对,直到找到第一对不匹配的字母对。然后,将s1的索引提前1,这样您就可以将s1[i+1]
与s2[i]
进行比较。如果以这种方式选择的其余对匹配,则我们知道s1是通过插入单个字母从s2形成的。
对于第三个问题,我们可以做同样的事情,但交换s1和s2。
对于最后一个问题,请考虑计算两个字符串中每个字符的出现次数。如果他们对每个角色具有相同的计数,那么你将能够成对进行互换(a result from group theory - &#34;每个排列都可以表示为换位的产物&#34 )。
所有这些操作都是O(n),这与字符串比较一样好。