1 条题解

  • 0
    @ 2026-1-27 19:32:49
    #include<bits/stdc++.h>
    using namespace std;
    
    // 判断两个字符串a和b是否相似的函数
    // 相似定义:长度相同且仅1个字符不同,或长度差1且可通过增删1个字符匹配
    bool f(string a,string b){
        // 确保a是较长的字符串,简化后续处理
        if(a.size() < b.size()) swap(a,b);
        int n_a = a.size();  // a的长度
        int n_b = b.size();  // b的长度
        
        // 情况1:两个字符串长度相同 → 检查是否仅1个字符不同(替换错误)
        if(n_a == n_b){
            int sum = 0;  // 统计不同字符的数量
            for(int i=0; i<n_a; i++){
                if(a[i] != b[i]) sum++;
            }
            // 不同字符数≤1 → 相似
            if(sum <= 1) return true;
        }
        
        // 情况2:两个字符串长度差为1 → 检查是否是漏写/多写1个字符
        if(n_a - n_b == 1){
            int i=0, j=0, sum=0;  // i遍历a,j遍历b,sum统计不匹配的次数
            while(i < n_a){
                if(a[i] == b[j]){
                    // 字符匹配,同时移动两个指针
                    i++, j++;
                }else{
                    // 字符不匹配,移动较长字符串的指针(模拟删除一个字符)
                    i++;
                    sum++;
                } 
            }
            // 不匹配次数≤1 → 相似
            if(sum <= 1) return true;
        }
        return false;
    }
    
    int main(){
        string s;  // 待检查的单词
        cin >> s;
        int n;  // 词表中的单词数量
        cin >> n;
        string c, d = "";  // c-当前遍历的词表单词;d-记录第一个找到的相似单词
        int flag = 0;  // 标记是否找到相似单词(0未找到,1已找到)
        
        // 遍历词表中的每个单词
        for(int i=1; i<=n; i++){
            cin >> c;
            // 检查当前单词是否与待检查单词完全相同
            if(c == s){
                cout << s;  // 完全匹配,直接输出并结束程序
                return 0;
            }
            // 如果还没找到相似单词,检查当前单词是否与待检查单词相似
            if(f(c, s) && flag == 0){
                d = c;  // 记录第一个相似的单词
                flag = 1;  // 标记已找到相似单词
            }
        } 
        
        // 遍历完词表后,根据结果输出
        if(flag == 0){
            cout << "NOANSWER";  // 未找到相似单词
        }else{
            cout << d;  // 输出第一个找到的相似单词
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1400
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者