0

我正在做一个拼写检查器。我已经实现了包含单词列表的哈希表,但是现在我必须编写五种用于生成可能的单词建议的技术。其中之一是

  1. 交换相邻字符
  2. 在每个字符之间插入一个字符

例如:

我有“bob”这个词...我希望能够在 (az)b (az)o (az)b(az) 之间插入一个字符,看看我是否能得到一个可能是建议的新词对于错过的拼写单词

这是我到目前为止所做的......但不起作用

public static void main(String[] args) {
    String word = "evelina";

    char[] wordCharArr = word.toCharArray();

    for(int i=0; i < wordCharArr.length ; i++) {
        //char temp1 = wordCharArr[i];
        for(char j = 'A'; j <= 'Z' ; j++) {
            word.substring(j);
        }
    }
}
4

3 回答 3

1

我所做的是添加一些代码来创建一个 ArrayList(本质上是一个无限数组),然后用围绕一个字母切换时发现的所有可能性填充它。它还会打印出每一个,但您可以将其删除。

我所做的唯一更改是:

1.添加数组列表

2.修复你的外循环;短一个字符(Bob 需要 4 次迭代,而不是 3 次)

3.添加额外的子字符串段来解释单词的其余部分。

可以通过 words.get(a) 检索元素;其中 'a' 是 Array-list 范围内的 int。不要忘记import语句,import java.util.*;

这也将比 Jeff 的解决方案更有效,因为不必检查整个字典,然后像下面建议的那样从字典中删除每个元素,它只需要检查具有所有 ~100 种可能性的字典。因为字典是按字母顺序排列的,所以可以非常快速地搜索它,但删除每个条目(近 100000 个单词)的效率会降低。

import java.util.*;
public class spellcheck {
public static void main(String[] args) {
    String word = "evelina";
    char[] wordCharArr = word.toCharArray();
    ArrayList<String> words = new ArrayList<String>();
    for(int i=0; i <= wordCharArr.length ; i++) {
        for(char j = 'A'; j <= 'Z' ; j++) {
            words.add(word.substring(0,i) + j + word.substring(i,wordCharArr.length));
    System.out.println(word.substring(0,i) + j + word.substring(i,wordCharArr.length));
        }
    }
}
}
于 2012-08-25T03:17:43.453 回答
0

你的问题出在你的 for 循环中。而不是只遍历您正在检查的单词的所有其他字母。您正在遍历每个字母,包括原始字母。外部 for 循环应该略有不同。

于 2012-08-23T21:40:02.340 回答
0

还有另一种选择,但我不确定它是更容易还是更难实现(至少对我来说听起来更容易)。您可以构建一个简单的查询机制,而不是遍历每个字符并将其插入到单词中,如下所示:

 Input: b?ob

所以你的算法会是这样的:

 1) Start with your entire word list
 2) Remove all words that don't start with b
 3) You can "ignore" the ?
 4) Remove all words that don't have a 'o' in the 3rd position
 5) Remove all words that don't have a 'b' in the 4th position
 6) Return the results

然后你浏览每个选项

 Input 2: bo?b
 Input 3: bob?
于 2012-08-23T21:46:08.367 回答