题目大意:
给出两个字符串A,B,问B串是否能通过最多一次操作变成A.
定义一次操作为:交换相邻两个字符。
思路:
首先我们求出有多少位与A串不同,记作cnt。
- 如果cnt==0,显然A,B两个串相同,Yes
- 如果cnt>2,说明无论怎么操作,A,B两个串都至少会有一位不相同
- 如果cnt==2,考虑找到第一位与A串不相同的字符,分别与前后交换,判断是否能变成A即可。(对于一次操作一定是相邻的,那只用判断就可以了,如果不行,显然两个不同字符的位置不相邻,无法操作)。
#include#include #include using namespace std; int len, cnt; string a, b, d; char c; int main() { cin >> a >> b; len = a.length(); for(int i = 0; i < len; i++) if(a[i] != b[i]) cnt++; if(cnt == 0) {printf("Yesn"); return 0;} if(cnt > 2 || cnt == 1) printf("Non"); else { for(int i = 0; i < len; i++) { if(b[i] != a[i]) { d = b; c = d[i]; d[i] = d[i - 1]; d[i - 1] = c; if(d == a) {printf("Yesn"); return 0;} d = b; c = d[i]; d[i] = d[i + 1]; d[i + 1] = c; if(d == a) {printf("Yesn"); return 0;} printf("Non"); return 0; } } } return 0; }



