我有一个java程序
- 读取一个文本文件,
- 将所有单词放在
ArrayList
中 - 将所有单词放入
ArrayList
,小写并去掉标点
我现在想再做两件事。
- 创建String 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);
}
}
按照以下步骤从字符串中生成所有字谜:
步骤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…数组中将有n个阶乘项,这就是为什么你知道你在正确的轨道上:)
如果你需要数组列表中每个字符串的变位,只需在for循环中调用它
经过一番挣扎,我试着理解你的问题,下面是我的答案。如果我说错了请指正。首先,你可以用一个数组列表做所有的预处理工作,比如改变大小写,删除语法。现在来看实际的函数:
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);
}
}