import java.io.*;
import java.util.*;
class Solution {
public static void main(String[] args) {
String[][] userContentLikes = new String[][]{
{"http://yahoo.com", "user3", "201999"},
{"http://google.com/maps", "user2", "201004"},
{"http://google.com/maps", "user1", "201015"},
{"http://google.com", "user4", "201004"},
{"http://google.com", "user2", "201012"},
{"http://google.com/maps", "user2", "201008"},
{"http://google.com/maps", "user2", "201013"},
{"http://google.com/maps", "user2", "201030"},
{"http://altavista.net/q?f=12344", "user3", "100002"},
{"http://google.com/maps", "user3", "201015"},
{"http://yahoo.com", "user2", "201035"},
{"http://altavista.net/q?f=12344", "user1", "100001"},
{"http://altavista.net/q?f=12344", "user1", "100004"},
{"http://geocities.com", "user1", "100007"},
{"http://geocities.com", "user3", "100009"},
};
System.out.println(findSimilarUser(userContentLikes, "user1"));
}
public static String findSimilarUser(String[][] likes, String userName) {
Set<String> set = new HashSet<String>();
for(String[] like : likes) {
if(like[1].equals(userName)) {
set.add(like[0]);
}
}
Map<String, Set<String>> map = new HashMap<String, Set<String>>();
for(String[] like : likes) {
if(!like[1].equals(userName) && set.contains(like[0])) {
Set<String> urls = map.get(like[1]);
if (urls == null) {
urls = new HashSet<String>();
}
urls.add(like[0]);
map.put(like[1], urls);
}
}
int maxCnt = Integer.MIN_VALUE;
String result = null;
for(Map.Entry<String, Set<String>> entry : map.entrySet()) {
int cnt = entry.getValue().size();
if (result == null || cnt > maxCnt) {
result = entry.getKey();
maxCnt = cnt;
}
}
return result;
}
static class Pair{
String userName;
String timeStamp;
public Pair(String userName, String timeStamp) {
this.userName = userName;
this.timeStamp = timeStamp;
}
}
public static Map<String, Pair> findLikes(String[][] likes) {
Map<String, Pair> map = new HashMap<String, Pair>();
for(String[] like : likes) {
Pair cur = map.get(like[0]);
if(cur == null) {
map.put(like[0], new Pair(like[1], like[2]));
} else {
if (Integer.parseInt(cur.timeStamp) > Integer.parseInt(like[2])) {
map.put(like[0], new Pair(like[1], like[2]));
}
}
}
return map;
}
}