我想读一个单词列表。然后我想要对每个单词中的每个字符进行字母顺序排列,以便我有一个完整的单词列表,其中每个字母都按字母顺序排列。例如,如果我想从文本文件中读取“cat”“dog”“mouse”,我将[a,c,t],[d,g,o]和[e,m,o,s, ü]。
我在Java中实现它。我想过链接列表或其他一些Collection,但我不确定如何实现这些。我知道这并不像将每个字符串转换为char数组或使用数组列表那么简单。 (我已经尝试过了)
有人有任何建议或举例吗?
基本上,我只是想用算法做得更好。
public class AnagramSolver1 {
static List<String> inputList = new ArrayList<String>();
public static void main(String[] args) throws IOException {
List<String> dictionary = new ArrayList<String>();
BufferedReader in = new BufferedReader(new FileReader("src/dictionary.txt"));
String line = null;
Scanner scan = new Scanner(System.in);
while (null!=(line=in.readLine()))
{
dictionary.add(line);
}
in.close();
char[] word;
for (int i = 0; i < dictionary.size(); i++) {
word = inputList.get(i).toCharArray();
System.out.println(word);
}
答案 0 :(得分:7)
如果您有一个名为String
的{{1}},则可以通过Arrays.sort
word
中已排序的char[]
个字符
word
我假设你想为一组单词的每个成员重复这个过程。
如果您有兴趣了解幕后发生的事情,我建议您查看source。
答案 1 :(得分:1)
Java已经为排序提供了很好的支持:您只需要将String
转换为char[]
数组,在其上调用Arrays.sort
,然后将该数组转换回{{ 1}}。
但是,如果你想对算法有一些乐趣,你可以尝试使用线性counting sort:计算原始字母,然后按字母顺序查看计数,然后写出{{ 1}}字符数。