/**
* http://gaojingsong.iteye.com/
* @author gaojingsong
* 单词拼写错误的几种基本场景:
* 例如 father
* 1、fther 漏掉字母 -->补救措施:插入字母
* 2、faather 多写一个字母 -->补救措施:删除字母
* 3、ftaher 字母写反 -->补救措施:交换字母
* 4、fcther 字母写错 -->补救措施:替换字母
*/
参考代码如下
package cn.com.test.mathoutDemo;
import java.util.HashSet;
import java.util.Set;
/**
* http://gaojingsong.iteye.com/
* @author gaojingsong
* 单词拼写错误的几种基本场景:
* 例如 father
* 1、fther 漏掉字母 -->补救措施:插入字母
* 2、faather 多写一个字母 -->补救措施:删除字母
* 3、ftaher 字母写反 -->补救措施:交换字母
* 4、fcther 字母写错 -->补救措施:替换字母
*/
public class SpellCorrect {
private static String alphabet = "abcdefghijklmnopqrstuvwxyz";
public static Set edit(String word) {
if (word == null)
return null;
Set out = new HashSet();
// delete
for (int i=0; i<word.length(); ++i) {
String wd = word.substring(0,i) + word.substring(i+1,word.length());
out.add(wd);
}
// insert
for (int i=0; i<=word.length(); ++i) {
for (int j=0; j<alphabet.length(); ++j) {
char c = alphabet.charAt(j);
String wd = word.substring(0,i) + c + word.substring(i,word.length());
out.add(wd);
}
}
// replace
for (int i=0; i<word.length(); ++i) {
for (int j=0; j<alphabet.length(); ++j) {
char c = alphabet.charAt(j);
String wd = word.substring(0,i) + c + word.substring(i+1,word.length());
out.add(wd);
}
}
// transpose
for (int i=1; i<word.length(); ++i) {
char c1 = word.charAt(i-1);
char c2 = word.charAt(i);
String wd = word.substring(0,i-1) + c2 + c1 + word.substring(i+1,word.length());
out.add(wd);
}
return out;
}
public static void main(String[] args) {
/**
* http://gaojingsong.iteye.com/
* @author gaojingsong
* 单词拼写错误的几种基本场景:
* 例如 father
* 1、fther 漏掉字母 -->补救措施:插入字母
* 2、faather 多写一个字母 -->补救措施:删除字母
* 3、ftaher 字母写反 -->补救措施:交换字母
* 4、fcther 字母写错 -->补救措施:替换字母
*/
String word = "tao";
System.out.println( edit(word) );
}
}