C ++中的元字符串(检查一个字符串交换后两个字符串是否可以相同)
在本节中,我们将看到如何检查两个字符串是否为元字符串。元字符串是非常相似的那些字符串。如果我们在一个字符串中交换两个元素,那么它将与另一个字符串匹配。假设两个字符串是“HELLO”和“OELLH”,则它们是元字符串。
要检查两个字符串是否为元字符串,我们必须执行以下步骤。
步骤-
如果两个字符串的长度不同,则返回false
否则,找到许多不匹配的字符,也存储不匹配字符的索引
如果计数大于2,则返回false
否则交换这些字符,然后如果两个字符串相同,则返回true,否则返回false。
示例
#include <iostream> using namespace std; bool areTheyMetaString(string s1, string s2) { int s1_len = s1.length(); int s2_len = s2.length(); if (s1_len != s2_len) return false; int prev = -1, curr = -1; int count = 0; for (int i=0; i<s1_len; i++) { if (s1[i] != s2[i]) { count++; // number of unmatched characters if (count > 2) return false; prev = curr; curr = i; } } return (count == 2 && s1[prev] == s2[curr] && s1[curr] == s2[prev]); } int main() { string s1 = "HELLO", s2 = "OELLH"; if(areTheyMetaString(s1, s2)){ cout << "元字符串"; } else { cout << "Not 元字符串"; } }
输出结果
元字符串