-4

我有一个java程序

  • 读取文本文件,
  • 把所有的话都放在一个ArrayList
  • 将所有单词放入一个ArrayList, 小写字母并删除标点符号

我现在想再做两件事。

  • 一个创建 String ArrayList 字符串的所有字谜的函数,
  • 一个 ArrayList 的 ArrayList,它将每个字谜和原始字符串存储到 ArrayList 中的每个 ArrayList 中。

所以我想开发一个函数,它将一个字符串从一个 ArrayList 插入到一个新的 ArrayList 中,并将其全部变成字谜并将它们放入一个 ArrayList 中,然后将该 ArrayList 放入正在读取旧 ArrayList 的 ArrayList 中。

看起来像这样的东西:

List<String> arLists = new ArrayList<String>(); //makes new array list
    for(String arList : words) //takes values from old array list
        ArrayList<String> anaLists = new ArrayList<String>(); //makes a new array list
        arLists.add(anag(anaLists,arList,"")); //uses a function that makes an 

我想做一个有点像这样的函数,但是我在这里所做的......并没有真正起作用。

public void anag(ArrayList<String> anaLists, String s1, String s2){
    if(s1.length() == 0){
        return anaLists;
    }
    for(int i = 0 ; i < s1.length() ; i++){ //only runs for string length
        String anaList = anag(s1.substring(0, i) + s1.substring(i+1, s1.length()), s1.charAt(i) + s2);
        anaLists.add(anaList);
        }
    }

这方面的一些指导会很棒。

4

2 回答 2

0

经过一番挣扎,我试图理解你的问题,这是我的答案。如果我错了,请纠正我。首先,您可以使用一个数组列表进行所有预处理,例如更改大小写、删除语法。现在到实际功能:

public void getAnag(String baseStr, ArrayList<String> finalAnagList)
{
    ArrayList<String> anagList = new ArrayList<String>();
    anagList = getAnagrams(baseStr); // getAnagrams is a support function to get the anagrams
    anagList.add(baseStr); // I suppose you want to add the base string also to the anagrams list
    finalAnagList.add(anagList);
}

您在程序中的调用函数将是:

public void testAnagrams()
{
    ArrayList<String> words = getWordsFromFile("/home/list.txt"); // gets the words from the file
    ArrayList<String> anagramsList = new ArrayList<String>();
    foreach(String word : words)
    {
         getAnag(word, anagramsList);
    }
}
于 2013-03-13T04:40:23.310 回答
0

要从字符串生成所有字谜,请按照以下步骤操作:

第 1 步:使用字符串replace删除空格,并确保已删除所有标点符号和大写字母。

第 2 步:编写此函数f(string s, string anagram, ArrayList<String> array)并使用以下命令调用它s = yourstring, anagram = "", array = new ArrayList<String>()

If s is empty, add anagram to array and return
For each letter l in s:
    newanagram = anagram + l
    news = s with l taken out of it (e.g. make a substring of everything before l in s and everything after l in s, and concatenate them together)
    call f(news, anagram, array)

这将探索递归自调用的“树”,并且在“树”的每个“叶子”处,所有字母的每个可能排列都将添加到数组中。当它完成时,n*n-1*n-2*n-3... aka n 阶乘条目将在数组中,这就是你知道你在正确的轨道上的方式:)

如果您需要数组列表中每个字符串的字谜,只需在 for 循环中调用它即可。

于 2013-03-13T04:45:15.727 回答