0

我已经开发了以下程序来使用 java 中的 Hashmap 打印字谜。但是无法弄清楚要在行内放置什么以map.put();用于将条目插入到 hashmap 中。

import java.util.*;

class anagram
{
    public static void main(String args[])
    {
        String temp;
        int i,n;
        Scanner s1=new Scanner(System.in);
        List<Integer> temp2;
        ArrayList<String> list=new ArrayList<String>();
        HashMap<String,ArrayList<Integer>> map=new HashMap<String,ArrayList<Integer>>();    
        System.out.println("Enter the number of strings");
        n=s1.nextInt();
        //Input the strings and store them in Hashmap after sorting each
        //string on character basis
        //e.g hello , olleh are both stored as "ehllo" --> 0,1
        //"ehllo" is sorted string and 0,1 are its keys
        //In this way, at the end each bucket in hashmap will have anagrams
        //which can be displayed on the basis of keys stored 
        for(i=0;i<n;i++)
        {
            temp=s1.next();
            list.add(temp);
            //what should I add here to input new string index into proper place
            map.put();
        }

        //Iterating the hashmap to print values of each bucket
        Iterator iterate=map.keySet().iterator();
        while(iterate.hasNext())
        {
            Map.Entry entry=(Map.Entry)iterate.next();
            temp2 =entry.getValue();
            for(i=0;i<temp2.size;i++)
                System.out.print(list.get(temp2.get(i))+" ");
        }   
        list.clear();
    }
    //method to sort the string
    private static String sort(String s)
    {
        char arr[]=s.toCharArray();
        Arrays.sort(arr);
        return String.valueOf(arr);
    }
}
4

2 回答 2

3

将索引存储为值似乎是开销。

您可以只存储输入值。地图将是:

Map<String, Collection<String>> anagramsBySortedLettersInThem = ...

然后你可以使用“经典”模式:

String key = sort(inputString);

if (!anagramsBySortedLettersInThem.containsKey(key)) {
  anagramsBySortedLetterInThem.put(key, new HashSet<String>);
} 

anagramsBySortedLettersInThem.get(key).add(inputString);

Set在这里使用,以避免重复。如果您需要重复 - 使用例如ArrayList

于 2013-10-23T13:51:41.990 回答
0

在我看来,你在这里有一个很好的计划。首先,您需要运行自定义排序函数以获取有序字符串。然后你需要在哈希图上做一个 get 来查看你是否已经有了那个 anagram 集的实例。如果 get 返回某些内容,只需将索引添加到关联列表。如果不创建新的数组列表,请添加新索引并使用排序键放置。

于 2013-10-23T13:58:22.593 回答