现在有一些英语单词需要做拼写检查,你的工具是一本词典。需要检查的单词,有的是词典中的单词,有的与词典中的单词相似,你的任务是发现这两种情况。单词A与单词B相似的情况有三种:
1、删除单词A的一个字母后得到单词B;
2、用任意一个字母替换单词A的一个字母后得到单词B;
3、在单词A的任意位置增加一个字母后得到单词B。
你的任务是发现词典中与给定单词相同或相似的单词。
第二部分是需要查询的单词,每行一个,以"#"结束。最多有50个需要查询的单词。
词典中的单词和需要查询的单词均由小写字母组成,最多包含15个字符。
i is has have be my more contest me too if award # me aware m contest hav oo or i fi mre #
me is correct aware: award m: i my me contest is correct hav: has have oo: too or: i is correct fi: i mre: more me解决方案: Java
import java.util.Scanner; public class Main{ String str[] = new String[10001]; public static void main(String[] args) { new Main().test(); } public void test() { Scanner sc = new Scanner(System.in); int index = 0; String s; while (sc.hasNext()) {// 读入字典中的单词 s = sc.next(); if (s.equals("#")) break; else str[index++] = s; } while (sc.hasNext())// 读入写入的单词 { s = sc.next(); if (s.equals("#")) break; else strCompare(s, index); } } /* 删除字符中的一个元素 */ public String strChange(String s,int index,int len) { String temp, temp1; if(index==0){ temp = s.substring(index+1) ; }else if(index==len-1){ temp = s.substring(0, index); }else{ temp = s.substring(0,index) ; temp1 = s.substring(index+1) ; temp =temp +temp1 ; } // System.out.println(temp); return temp ; } /* *字符串比较 */ public void strCompare(String s, int index) { int i, j; for (i = 0; i < index; i++) {//相等后返回 if (s.equals(str[i])) { System.out.println(s + " is correct"); return; } } System.out.print(s + ":"); //不相等时 for (i = 0; i < index; i++) {//遍历字典 if (s.length() == (str[i].length() + 1)) {//待测单词长度为字典单词加1 for (j = 0; j < s.length(); j++) { // System.out.println(str[i]); String temp = strChange(s,j,s.length()); if (temp.equals(str[i])) { System.out.print(" " + str[i]); break; } } }else if(s.length() == (str[i].length()-1)) { for (j = 0; j < str[i].length(); j++) { //System.out.println(str[i]) ; String s1 = strChange(str[i],j,str[i].length()) ; if(s1.equals(s)) { // System.out.print("哈哈"); System.out.print(" " + str[i]); break ; } } } else if(s.length() == str[i].length()) { for(j=0;j<s.length();j++) { //System.out.println(str[i]); String s1 = strChange(s,j,s.length()); String s2 = strChange(str[i],j,str[i].length()) ; if(s1.equals(s2)) { System.out.print(" " + str[i]); break ; } } } } System.out.println(); } }解决二 : G++:
#include <stdio.h> #include <string.h> int Find(int a); int n; int lend[10001]; char Dt[10001][20],In[20],len; int Find(int a) { int i,t; t=lend[a]-len; if (t==-1) { for (i=0;i<lend[a]&&Dt[a][i]==In[i];i++); for (;i<lend[a]&&Dt[a][i]==In[i+1];i++); if (i==lend[a]) return 0; } else if (t==0) { for (i=0;i<len&&Dt[a][i]==In[i];i++); for (i++;i<len&&Dt[a][i]==In[i];i++); if (i==len) return 0; } else if (t==1) { for (i=0;i<len&&Dt[a][i]==In[i];i++); for (;i<len&&Dt[a][i+1]==In[i];i++); if (i==len) return 0; } return 1; } int main() { int i; scanf("%s",&Dt[0][0]); while (Dt[n][0]!='#') { lend[n]=strlen(Dt[n]); scanf("%s",&Dt[++n][0]); } scanf("%s",In); while (In[0]!='#') { len=strlen(In); for (i=0;i<n;i++) if (lend[i]==len&&strcmp(Dt[i],In)==0) { printf("%s is correct\n",In); break; } if (i==n) { printf("%s:",In); for (i=0;i<n;i++) if (Find(i)==0) printf(" %s",Dt[i]); printf("\n"); } scanf("%s",In); } return 0; }
相关推荐
"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`。 - 并查集:用于处理集合的合并和查询...
1. **树和二叉树**:树和二叉树的基本操作和应用(poj1035, poj3080, poj1936)。 2. **堆**:堆排序及其在优先队列中的应用(poj2388, poj2299)。 3. **哈希表**:用于快速查找和存储,如Hash函数的设计(poj3349,...
- **例题**: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...
- 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...