LintCode Inverted Index - James Pan - 博客频道 - CSDN.NET
方法:使用哈希影射。
Create an inverted index with given documents.
Given a list of documents with id and content. (class Document)
[
  {
    "id": 1,
    "content": "This is the content of document 1 it is very short"
  },
  {
    "id": 2,
    "content": "This is the content of document 2 it is very long bilabial bilabial heheh hahaha ..."
  },
]
Return an inverted index (HashMap with key is the word and value is a list of document ids).
{
   "This": [1, 2],
   "is": [1, 2],
   ...
}
 * Definition of Document:
 * class Document {
 *     public int id;
 *     public String content;
 * }
 */
public class Solution {
    /**
     * @param docs a list of documents
     * @return an inverted index
     */
    public Map<String, List<Integer>> invertedIndex(List<Document> docs) {
        // Write your code here
        Map<String, Set<Integer>> map = new HashMap<>();
        for(Document doc : docs) {
            String[] strs = doc.content.split(" ");
            for(String str : strs) {
                if ("".equals(str)) continue;
                update(str, doc.id, map);
            }
        }
        Map<String, List<Integer>> results = new HashMap<>();
        for(Map.Entry<String, Set<Integer>> entry : map.entrySet()) {
            List<Integer> list = new ArrayList<>(entry.getValue());
            Collections.sort(list);
            results.put(entry.getKey(), list);
        }
        return results;
    }
    private void update(String str, int id, Map<String, Set<Integer>> results) {
        Set<Integer> set = results.get(str);
        if (set == null) {
            set = new HashSet<>();
            results.put(str, set);
        }
        set.add(id);
    }
}
Read full article from LintCode Inverted Index - James Pan - 博客频道 - CSDN.NET