題目描述
您將會得到一個包含人名和電話號碼的電話簿。接著給您一些人名,讓您從電話簿中搜尋對應的電話號碼並且輸出。
原題網址
輸入格式
第一行包含一個整數n,表示電話簿的項目數量,範圍是1到100000之間(包含1和100000)。每個項目有兩行,第一行是人名,第二行是此人的電話號碼。人名均由小寫英文字母組成,有的為「first-name last-name」(first-name和last-name之間有空格),有的只有「first-name」。每個電話都剛好有開頭不為0的8個數字。
電話簿輸入完成之後,接著要輸入要查找的人名,以換行分隔不同人名,人名的數量在1到100000之間(包含1和100000)。
輸出格式
搜尋每個要查找的人名,分行輸出查找到的資料,若有找到,輸出格式為「person's name=phone number」,若沒有找到,直接輸出「Not found」。
範例輸入
3
uncle sam
99912222
tom
11122222
harry
12299933
uncle sam
uncle tom
harry
uncle sam
99912222
tom
11122222
harry
12299933
uncle sam
uncle tom
harry
範例輸出
uncle sam=99912222
Not found
harry=12299933
Not found
harry=12299933
解題概念
電話簿的格式為key-value的結構,符合Java程式語言中Map的結構,因此直接使用Map來儲存電話簿的資料即可。Map物件的put方法,可以放入key-value資料,get方法,則可以利用傳入的key來取得value。
參考答案
import java.util.HashMap;
import java.util.Scanner;
public class Solution {
public static void main(final String[] args) {
final Scanner in = new Scanner(System.in);
final int n = in.nextInt();
in.nextLine();
final HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < n; i++) {
final String name = in.nextLine();
final int phone = in.nextInt();
in.nextLine();
map.put(name, phone);
}
final StringBuilder sb = new StringBuilder();
while (in.hasNext()) {
final String s = in.nextLine();
if (map.containsKey(s)) {
sb.append(s).append("=").append(map.get(s));
} else {
sb.append("Not found");
}
sb.append("\n");
}
sb.deleteCharAt(sb.length() - 1);
System.out.println(sb.toString());
}
}