创建一个单词转换图

时间:2013-05-13 19:04:57

标签: java graph

我正在尝试从字典中创建一个单词图表,其中图表中的相邻单词应该与这两个规则中的任何一个一致: 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);

                }

    }
}

}

感谢您的任何提示。

1 个答案:

答案 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;
}