题解 | #一次交换#

一次交换

https://ac.nowcoder.com/acm/problem/251441

题目要求必须且只能交换一次(很多人没拿满多半是这里出错),哪怕一开始两字符串相等,交换后可能就不等了。 思路:(有两种情况)

1.两字符串有且只有两个地方不等,且A串第一个字符==B串第二个字符,A串第二个字符==B串第一个字符

2.两字符串相等,且字符串中至少有一个字符出现次数大于1,这样交换后才会相等

#include<bits/stdc++.h>
using namespace std;

vector<pair<char,char>> a;
int cnt[26];

int main()
{
    int n;    cin>>n;
    string s1,s2;    cin>>s1>>s2;
//     if(s1.size()!=s2.size()){//防止两字符串不等长,但对这道题是多余的
//         cout<<"NO";
//         return 0;
//     }
    for(int i=0; i<s1.size(); i++){
        if(s1[i]!=s2[i]){
            a.push_back(make_pair(s1[i],s2[i]));
        }
        cnt[s1[i]-'a']++;
    }
    bool flag = false;
    for(int i=0; i<26; i++)
        if(cnt[i]>1){
            flag = true;
            break;
        }
//     if(a.size()!=2)    cout<<"NO";
//     else if(a[0].first!=a[1].second||a[1].first!=a[0].second)
//             cout<<"NO";
//     else    cout<<"YES";
    if((a.size()==2&&a[0].first==a[1].second&&
       a[1].first==a[0].second)||(a.empty()&&flag))
        cout<<"YES";
    else    cout<<"NO";
    
    return 0;
}
全部评论

相关推荐

04-25 19:29
已编辑
宁波大学 运营
被普调的六边形战士很高大:你我美牛孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务