A 任老师的单词纠错(分治)
Description
任老师是广东外语外贸大学第一个省级文科重点实验室语言工程与计算实验室的研究员。他致力于自然语言处理研究。任老师在自然语言处理的研究过程中需要对英文文本进行预处理,利用字典找出文章中有多少个拼写错误的单词。如果你对自然语言处理比较感兴趣,请先帮任老师高效地解决这个问题吧。算法复杂度要求为O(logN)
Input
第一行一个数字n,0 < n < 100000,表示字典的单词数。
后面n行,每行表示字典里的一个单词。单词按照从小到大的顺序排序。
接下来一个数字m,表示英文文章的长度。
后面m行,0 < m < 100000,每行表示文章里的一个单词
Output
一个数字,表示有多少个单词拼写错误
Sample Input 1
5
a
book
is
that
this
4
this
iz
a
book
Sample Output 1
1
thinking
- 考点:二分搜索,时间复杂度为 log n
- 变形:将数字顺序变为字典序,方法一样。
- 题意:计算找不到的个数
code
#include<iostream>
using namespace std;
int n;
string s[100001];
int m;
int ans = 0;
//二分搜索
int find(int l, int r, const string& a) {
if (l < r - 1) {
int mid = (l + r) / 2;
//根据字典序进行比较
if (a < s[mid]) find(l, mid, a);
else if (a > s[mid]) find(mid, r, a);
}
//查不到答案累加器就加 1
else if (s[l] != a && s[r] != a) ans++;
return 0;
}
int main() {
string a;
cin >> n;
for (int i = 0; i