用c++来写给你一段源码:有一天小y突然发现自己的计算机感染了一种病毒!还好小y发现这种病毒很弱只是会把文档中的所有字母替换成其它字母但并不改变顺序也不会增加和删除字母。现在怎么恢复原来的文档呢!小y很聪明他在其他没有感染病毒的机器上生成了一个由若干单词构成的字典字典中的单词是按照字母顺序排列的他把这个文件拷贝到自己的机器里故意让它感染上病毒他想利用这个字典文件原来的有序性找到病毒替换字母的规律再
这里给出一个简单的实现,基于将字典中的单词按字母顺序排序,并使用二分查找来查找每个字符的替换字符。
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
vector<string> dict; // 字典
char repl(char c) {
int lo = 0, hi = dict.size() - 1;
while (lo <= hi) {
int mid = (lo + hi) / 2;
if (dict[mid][0] > c) {
hi = mid - 1;
} else if (dict[mid][0] < c) {
lo = mid + 1;
} else {
return dict[mid][1];
}
}
return c; // 没找到,返回原字符
}
int main() {
int n;
cin >> n; // 字典中单词的数量
dict.resize(n);
for (int i = 0; i < n; i++) {
cin >> dict[i];
}
sort(dict.begin(), dict.end()); // 按字母顺序排序
string str;
cin >> str; // 被感染的字母串
for (int i = 0; i < str.length(); i++) {
cout << repl(str[i]);
}
cout << endl;
return 0;
}
该实现中,repl函数用于查找每个字符的替换字符。它使用二分查找在字典中查找以该字符开头的单词,并返回该单词的第二个字符作为替换字符。如果没有找到以该字符开头的单词,那么就返回原字符。最后,对于被感染的字母串中的每个字符,都调用repl函数来获取其替换字符,并将其输出到标准输出中
原文地址: https://www.cveoy.top/t/topic/fjOg 著作权归作者所有。请勿转载和采集!