1 public class test1 { 2 /** 3 * 思路:若是A與某人有共同好友,則該人必出如今二度好友中 4 * 不在二度好友中的,則與A的共同好友數必然爲0 5 * 故只需遍歷全部的二度好友便可,可是不要將那些無共同好友的一度好友忘記!也就是初始化firstout 6 * @param args 7 */ 8 9 10 // directs爲A的一度好友list,indirects爲Map<String,List<String>表明一度好友的一度好友(不包括A)映射關係表 11 // firstout爲A與其一度好友的共同好友數Map,secondout爲A與其二度好友的共同好友數Map 12 public static void main(String[] args) { 13 14 String directsString = "BDEH"; 15 String bString = "CD"; 16 String dString = "B,E,G,G"; 17 String eString = "C,D"; 18 String hString = "I"; 19 List<String> directs = stringToList(directsString); 20 21 22 Map<String, List<String>> indirects = new HashMap<String, List<String>>(); 23 indirects.put("B", stringToList(bString)); 24 indirects.put("D", stringToList(dString)); 25 indirects.put("E", stringToList(eString)); 26 indirects.put("H", stringToList(hString)); 27 28 Map<String, Integer> firstout = new HashMap<String, Integer>();//用於存放A與一度好友的共同好友數目 29 Map<String, Integer> secondout = new HashMap<String, Integer>();//用於存放A與二度好友的共同好友數目 30 31 //因爲遍歷全部二度好友,先去考慮在不在fistout中,若是不在則必爲二度好友,而後纔去考慮在不在secondout中作最後處理, 32 //故firstout須要進行初始化,保證fistout+secondout包含全部A的一度好友與二度好友 33 for(String str : directs) { 34 firstout.put(str, 0); 35 } 36 37 for(Map.Entry<String, List<String>> entry : indirects.entrySet()) { 38 for(String id2 : entry.getValue()) { 39 Integer value = firstout.get(id2); 40 if(value != null) { 41 firstout.put(id2, value+1); 42 }else { 43 if(secondout.get(id2) == null) { 44 secondout.put(id2, 1); 45 }else { 46 secondout.put(id2, secondout.get(id2) + 1); 47 } 48 } 49 } 50 } 51 52 System.out.println("A與一度好友B的共同好友數: " + firstout.get("B")); 53 System.out.println("A與一度好友D的共同好友數: " + firstout.get("D")); 54 System.out.println("A與二度好友C的共同好友數: " + secondout.get("C")); 55 System.out.println("A與二度好友I的共同好友數: " + secondout.get("I")); 56 } 57 58 public static List<String> stringToList(String str) { 59 List<String> list = new ArrayList<String>(); 60 for (int i = 0; i < str.length(); i++) { 61 list.add(str.charAt(i) + ""); 62 } 63 return list; 64 } 65 }
輸出結果:spa
A與一度好友B的共同好友數: 1
A與一度好友D的共同好友數: 2
A與二度好友C的共同好友數: 2
A與二度好友I的共同好友數: 13d