我正在尝试从字典中创建一个单词图表,其中图表中的相邻单词应该与这两个规则中的任何一个一致: 1)其中一个单词有一个以上的字符,没有那个额外的字符,它们是相同的 2)长度相等且除了一个字母(单字符替换)外是相同的
我写了2个方法来创建图表。
使用第一个规则的第一个(addLadder)正常工作: 但我遇到了第二种方法(addEq)的问题,该方法使用了第二条规则:
public static void addLadder(){
for(Map.Entry<Integer,Set<String>> e:theMap.entrySet())
{
int theWordLen = e . getKey ( ) ;
Set<String>theWords = e.getValue( );
if(theWordLen>1){
Set<String>shorterWords = theMap.get(theWordLen-1);
for(String s :theWords)
{
for(int i=0; i<theWordLen ; i++)
{
String shorter = removeOneChar (s,i);
if(shorterWords.contains( shorter ) )
{
addEdge(s,shorter,s.length());
addEdge(shorter,s,s.length());
}
}
}
}
}
}
public static void addEq(){
for(Map.Entry<Integer,Set<String>> e:theMap.entrySet())
{
int theWordLen = e.getKey ( ) ;
Set<String>theWords = e.getValue( );
for(int i=0; i<theWordLen ; i++)
{
Map<String , List<String>>repMap = new TreeMap<String , List<String>>();
List<String> myList = new ArrayList<String>();
for(String w:theWords )
{
String shorter = removeOneChar(w,i);
myList.add(shorter);
repMap.put(w, myList);
}
}
}
}
感谢您的任何提示。
答案 0 :(得分:1)
只要编辑距离为1,只需检查每个字符的单词字符: e.g:
private boolean ruleTwo (String s1, String s2)
{
if (s1.length() != s2.length())
return false;
int different = 0;
for (int i=0; i<s1.length() && different <= 1; i++)
{
if (s1.charAt(i) != s2.charAt(i))
different ++;
}
return different == 1;
}