题目描述 将为您提供两个字符串和请确定是否可以通过最多执行一次以下操作使S和T相等: 选择 中的两个相邻字符并交换它们。 请注意,允许选择不执行该操作。 输入 输入来自以下格式的标准输入:、 输出 如果可以通过在问题陈述中最多执行一次操作使S和T相等,请打印“Yes”;否则,请打印“No”。 样例输入1 abc acb 样例输出1 Yes 解释:可以交换S的第2和第3个字符,使S和T相等。 样例输入2 aabb bbaa 样例输出2 No 解释:无法进行使S和T相等的操作。 样例输入3 abcde abcde 样例输出3 Yes 解释:S和T已经相等了。 约束条件 和 中的每一个都是一个长度介于2和100(含)之间的字符串,由小写英文字母组成。 和 的长度相同。c++代码
时间: 2024-04-12 11:26:41 浏览: 81
您好!根据您的描述,您需要一个C++代码来判断给定的两个字符串是否可以通过最多一次操作使它们相等。下面是一个实现的示例代码:
```cpp
#include <iostream>
#include <string>
#include <algorithm>
bool canStringsBeEqual(std::string s, std::string t) {
int n = s.length();
int diffCount = 0;
for(int i = 0; i < n; i++) {
if(s[i] != t[i]) {
diffCount++;
}
if(diffCount > 2) {
return false;
}
}
// If there are no differences or exactly two differences, strings can be made equal
if(diffCount == 0 || diffCount == 2) {
return true;
}
// If there is exactly one difference, check if swapping adjacent characters can make strings equal
for(int i = 0; i < n - 1; i++) {
std::swap(s[i], s[i + 1]);
if(s == t) {
return true;
}
std::swap(s[i], s[i + 1]); // Revert the swap
}
return false;
}
int main() {
std::string s, t;
std::cin >> s >> t;
if(canStringsBeEqual(s, t)) {
std::cout << "Yes" << std::endl;
} else {
std::cout << "No" << std::endl;
}
return 0;
}
```
这段代码首先定义了一个名为`canStringsBeEqual`的函数,它接受两个字符串`S`和`T`作为参数,并返回一个布尔值。函数首先遍历两个字符串,计算它们之间的不同字符数`diffCount`。如果这个值大于2,说明无法通过最多一次操作使字符串相等,直接返回`false`。
然后,函数检查`diffCount`的值。如果它为0或2,表示字符串已经相等或者只有两个字符不同,可以通过一次交换操作使它们相等,返回`true`。
如果`diffCount`为1,表示只有一个字符不同,函数会遍历字符串`s`,尝试交换相邻的字符,并检查是否与字符串`t`相等。如果找到了一次交换能使两个字符串相等,返回`true`。如果没有找到,则返回`false`。
在主函数中,我们读取输入的两个字符串,并调用`canStringsBeEqual`函数来判断它们是否可以通过最多一次操作使它们相等。根据返回的结果,输出"Yes"或"No"。
希望这段代码能满足您的需求!如有任何疑问,请随时向我提问。
阅读全文