1 条题解
-
0
#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
- 上传者