C ++检查两个字符串的内容效率

时间:2016-01-27 03:31:35

标签: c++ string

假设我有以下两个字符串:

string s1 = // some string

string s2 = //某个字符串

如何有效地检查s1是否与s2的区别仅为1个字母? (如果s1长度== s2长度)

如何通过插入一个字母来有效地检查s1是否与s2不同?

如何有效地检查s1与s2的区别是否与1删除了一个字母?

如何有效地检查s1的字母是否可以连续配对并换成s12的相等内容?

1 个答案:

答案 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),这与字符串比较一样好。