- 浏览: 202009 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (137)
- c++ (74)
- c++,算法,回溯 (2)
- DP问题。 (9)
- DP问题,0/1背包问题 (3)
- 数学问题 (6)
- 贪心算法 (10)
- 排序 (16)
- 数据结构 (7)
- 容器 (2)
- 模拟问题 (2)
- 水题 (8)
- 并查集 (3)
- 非技术 (2)
- 素数问题 (1)
- DFS (3)
- 二叉树 (1)
- 递归 (1)
- 图论 (5)
- 最小生成树 (5)
- 最短路径 (6)
- bell_flaod算法 (2)
- hash (3)
- 二分查找 (1)
- 搜索 (5)
- BFS (5)
- STL (3)
- 字符串hash (1)
- 拓扑排序 (1)
- 字典树 (4)
- 哈弗曼树 (1)
- KMP (7)
- 线段树 (9)
- 树状数组 (6)
- 全排列 (2)
- DP问题 (2)
- LCS (1)
- 最长不下降子序列 (2)
- 面试经验 (3)
关于图论的一些问题暂时到此结束,下面进入数据结构专题,首先讨论串的问题:
题意: 先输入一个字典,再输入一些字符串,在字典里找到与该字符串相同的单词,若没有,找到与其差一个的单词:多一个字符or少一个字符or错一个字符 输入: 一个字典,#结束 输入n个字符串,在字典中查找,一共有五种情况:
输出: ** is correct String: string1 string 2 关于输出的操作,一共分为五种情况 a:两个单词完全一致,则输出 **is correct 如果长度相差为一或者为O(有一个单词不一样),这时有二种情况,1: 相差为一(分为两种情况1:大于一2:小于一);2:相差为0;b:单词长度相差大于等于二,则不输出结果。 针对这五种情况讨论即可:
思路: 输入的字符串一共有5中情况: 1、和字典里匹配成功,输出“正确” 2、删除一个可以匹配 3、插入一个可以匹配 4、更改一个可以匹配 5、其他情况 代码如下:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
char s[20];
int n,size=0;
string v,a[10010],b[10010];
bool cmp(string s1,string s2)
{//如果比较的串和字典中的串长度差的为-1.0.1:
int s=0;
string t;
if(s1.size()>s2.size()) //s1>s2大就交换,保证s2>=s1
{
t=s1;
s1=s2;
s2=t;
}
if(s1.size()<s2.size()) //就是a!=b,大于的话已经交换了
{
s=0;
for(int i=0;i<s2.size()&&s<s1.size();i++)
if(s1[s]==s2[i])
s++;
if(s==s1.size())
return true; //因为b=a+1,所以只有一个不一样的话,删除一个就是正确的
}//end if 完成了2、删除一个就正确 3、插入一个就正确
else//长度相等的话
{
s=0;
for(int r=0;r<s1.size();r++)
if(s1[r]==s2[r]) s++;
if(s==s1.size()-1)
return true;//s为匹配的个数如果有且只有一个不一样的
}//完成了4、更改一个正确
return false;
}//end of cmp
int main()
{
while(scanf("%s",s)!=EOF)
{ //输入字典:
if(!strcmp(s,"#")) break;
b[size]=s;
a[size]=s;
++size;
}
sort(a,a+size); //对a排序 (默认为升序)
//a的存在只是为了查找一样的,后面没用了。
while(scanf("%s",s)!=EOF)
{ //输入要查的字
if(!strcmp(s,"#")) break;
v=s;
n=v.size();
if(binary_search(a,a+size,v)) //从a开始到a+size找和v相同的,//用二分查找(折半查找和v相同的)1、若存在,则输出* is correct
{
cout << v << " is correct\n" ;
continue;
}
cout << v <<": ";
// 同printf("%s: ",v.c_str());
int i;
for(i=0;i<size;i++)
{//从头到尾搜索字典。。。。
if(b[i].size()<n-1||b[i].size()>n+1)
continue;
//若打错的字和字典里的字相差2位或者2位以上,无匹配
if(cmp(b[i],v))
//若打错的字和字典里的字相差1位或者不差,则可能可以通过2、3、4种方法改正
cout<< b[i] <<" ";
// 同printf("%s ",b[i].c_str());
}
cout<<endl;
} //end while
return 0;
}
发表评论
-
虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承
2013-08-29 14:34 836虚函数:虚函数是C++中用于实现多态(polymorphis ... -
排序算法总结
2013-05-17 11:00 841选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, ... -
poj 3122
2012-12-11 19:51 866题意:作者要开一个生日party,他现在拥有n块高度都为1 ... -
poj 3273
2012-12-11 16:49 982题意:给你天数n,和每天需要花的钱,让你把这些天分成m份(每份 ... -
字典树学习材料
2012-05-30 14:29 967字典树,又称单词查找树,Trie树,是一种树形结构,典型应 ... -
poj 1159
2012-05-28 19:08 1441题目大意:给你一段字符串,让你求出在中间最少加入几个字符 ... -
poj 3176
2012-05-28 14:47 1016大致题意: 输入一个n层的三角形,第i层有i个数,求从第 ... -
poj 1260
2012-05-28 09:54 1610题意解释: 有n个等级的珠宝,等级依次升高,等级越高价钱越高 ... -
poj 1836
2012-05-28 09:22 2710是POJ2533的扩展题。题意不难,令到原队列 ... -
poj 2533
2012-05-26 15:36 1269在做这道题目之前,首先让我们了解一下什么是LIS算法,LIS俗 ... -
poj 3267
2012-05-26 09:43 801从程序可以看出,第i个位置到L所删除的字符数,总是先取最坏情况 ... -
poj 1276
2012-05-25 16:20 2392题意: 这道题的意思是给你一堆钱,各种面值的都有,比 ... -
poj 1094
2012-05-25 13:54 1107题意:给出字母个数,和有限个有序对(a<b)求出能确定字 ... -
poj 3393
2012-05-23 17:00 1256大致题意: 科普文一篇,文章80%都是无用信息,因为 ... -
poj 3007
2012-05-14 10:21 991大致题意: 给定一个字符串,从任意位置把它切为两半, ... -
poj 3096
2012-05-10 21:09 1003题意: 定义D-pairs表示取字符串s中相距为D的两个字母 ... -
poj 1426
2012-04-26 20:11 2170大致题意: 给出一个整数n,(1 <= n <= ... -
poj 1797
2012-04-24 15:05 1623题目大意是就是何处一个图,n个顶点和m条边,每个边都有最大承载 ... -
poj 1338
2012-04-23 10:20 1257题意:题目意思是求由2,3,5的乘积组成的数从大到小排列,从1 ... -
poj 2021
2012-04-19 15:00 948题意:Ted今年100岁,给出n对他家族的关系:“父 ...
相关推荐
"POJ1035-Spell checker 测试数据" 是一个与编程竞赛相关的主题,其中“POJ”是北京大学主办的在线编程平台Problem Online Judge的缩写,它提供了各种算法题目供参赛者挑战。"Spell checker" 指的是这个题目所涉及的...
【标题】"POJ1035 - Spell checker"是一个编程竞赛题目,源自北京大学的在线判题系统POJ(Problem Set of Peking University)。这个题目要求参赛者编写一个拼写检查器,对输入的单词进行错误检测并提供可能的纠正...
《多种解题技巧在POJ1035_Spelling Checker中的应用》 在编程竞赛领域,ACM(国际大学生程序设计竞赛)是一项备受瞩目的赛事,它要求参赛者在有限的时间内解决一系列复杂的算法问题。POJ(Problemset Online Judge...
* 串:串是指解决问题的基本数据结构,如 poj1035、poj3080、poj1936。 * 排序:排序是指解决问题的排序算法,如快排、归并排、堆排。 * 简单并查集:简单并查集是指解决问题的简单并查集算法。 * 哈希表和二分查找...
* 串:例如 poj1035、poj3080、poj1936。 * 排序:例如 poj2388、poj2299。 * 简单并查集的应用。 * 哈希表和二分查找等高效查找法:例如 poj3349、poj3274、poj2151、poj1840、poj2002、poj2503。 * 哈夫曼树...
- 字符串处理:如KMP算法和后缀数组,用于字符串搜索和模式匹配,如`poj1035, poj3080`。 - 排序算法:如快速排序和归并排序,用于对数据进行排序,如`poj2388, poj2299`。 - 并查集:用于处理集合的合并和查询...
- **例题**:poj1035, poj3080, poj1936 - **解释**:树形数据结构的题目通常涉及树的遍历、查找等问题。 #### 2. 字符串 - **例题**:poj2388, poj2299 - **解释**:字符串问题通常涉及字符串的模式匹配、编辑距离...
【标题】"POJ2586-Y2K Accounting Bug" 是一道来自北京大学在线判题系统POJ(Problem Set)的编程题目。该题目主要关注的是计算机编程中的一个历史问题——Y2K千年虫问题(Year 2000 Problem),同时也涉及到会计...
- **字符串处理**:如poj1035,涉及字符串操作和模式匹配。 - **排序算法**:包括快速排序、归并排序和堆排序,如poj2388,优化查找效率。 - **并查集**:用于处理集合合并与查询问题。 - **哈希表和二分查找**...
- (poj1035, poj3080, poj1936):基本的数据结构及其应用场景。 2. **树**: - (poj2388, poj2299):介绍二叉树、平衡二叉树等。 3. **字符串处理**: - (poj3349, poj3274, POJ2151, poj1840, poj2002, poj...
poj1035、poj3080等训练了串的操作,poj2388、poj2299等则涉及排序问题,poj2524、poj1611等是并查集的实例,poj3349、poj3274等展示了哈希表和二分查找,poj3253是哈夫曼树的题目,poj2442和poj1442则关于堆。...
- 推荐题目:[poj1035](https://vjudge.net/problem/POJ-1035)、[poj3080](https://vjudge.net/problem/POJ-3080)、[poj1936](https://vjudge.net/problem/POJ-1936) - 堆结构通常用于实现优先队列等数据结构。 2...
1. **树和二叉树**:树和二叉树的基本操作和应用(poj1035, poj3080, poj1936)。 2. **堆**:堆排序及其在优先队列中的应用(poj2388, poj2299)。 3. **哈希表**:用于快速查找和存储,如Hash函数的设计(poj3349,...
- poj1035 - poj3080 - poj1936 - **应用场景**:适用于文本处理、模式匹配等问题。 **2. 排序** - **定义**:包括快速排序、归并排序、堆排序等。 - **示例题目**: - poj2388 - poj2299 - **应用场景**:...
1. **串**:处理字符串的问题,如POJ1035、3080和1936。 2. **排序**:包括快速排序、归并排序(涉及逆序数)、堆排序,如POJ2388、2299。 3. **并查集**:处理集合合并和查询问题。 4. **哈希表** 和 **二分查找**...
- **示例题目**: poj1035, poj3080, poj1936 #### 2. 栈 - **内容**: 包括栈的基本操作如入栈、出栈等。 - **示例题目**: poj2388, poj2299 #### 3. 字典树 - **内容**: 字典树是一种高效的数据结构,主要用于...
* 串算法:POJ1035、POJ3080、POJ1936 * 哈希表和二分查找等高效查找法:POJ3349、POJ3274、POJ2151、POJ1840、POJ2002、POJ2503 * 哈夫曼树:POJ3253 * 背包问题:POJ1837、POJ1276 * DP算法:POJ3267、POJ1836、...
* 串:poj1035, poj3080, poj1936 * 排序:快排、归并排、堆排 + poj2388, poj2299 * 简单并查集的应用 * 哈希表和二分查找等高效查找法 + poj3349, poj3274, poj2151, poj1840, poj2002, poj2503 * 哈夫曼树:poj...
例如,POJ1035和POJ3080是串的经典例题,而POJ2388和POJ2299则是排序算法的代表题。 在简单搜索部分,涵盖了深度优先搜索和广度优先搜索两种搜索算法。例如,POJ2488和POJ3083是深度优先搜索的经典例题,而POJ3278...