題目描述

您將會得到一個包含人名和電話號碼的電話簿。接著給您一些人名,讓您從電話簿中搜尋對應的電話號碼並且輸出。



原題網址

https://www.hackerrank.com/challenges/phone-book

輸入格式

第一行包含一個整數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
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());
    }
}