[プログラマー]電話番号リスト


📌 質問する


電話帳の電話番号の中に、別の番号のプレフィックスがあるかどうかを確認します.
電話番号が次の場合:
救助隊:119
朴俊英:97674223
池英錫:119552421
電話帳の電話番号が電話番号の配列phone bookをソリューション関数のパラメータとする場合、ある番号が別の番号の接頭辞である場合は、falseでない場合はtrueを返します.
[制限]
○phone bookの長さは1以上1000000以下です.
各電話番号の長さは1または20以下です.
  • のような電話番号は重複していません.
  • >>質問の詳細-プログラマー

    💡 プール(Java)

    import java.util.Arrays;
    
    class Solution {
        public boolean solution(String[] phone_book) {
            boolean answer = true;
            
            //배열을 정렬
            Arrays.sort(phone_book);
            
            //startWith로 index바로 인접한 것들끼리 비교
            for (int i = 0; i < phone_book.length-1; i++) {
    			if(phone_book[i+1].startsWith(phone_book[i])){
    				answer=false;
    			};		
    		}
            
            return answer;
        }
    }
    最初は、すべての配列要素と比較すべきだと思いましたが、sort機能で隣接する1つを比較するだけでいいので、より効率的なコードになります.他の人の解答の中でhashで解読するのも参考になるようです.(テストの結果、startWithを使用した方が解答速度が速いことがわかりました)
    import java.util.HashMap;
    import java.util.Map;
    
    class Solution {
        public boolean solution(String[] phoneBook) {
            boolean answer = true;
    
    		//HashMap에 전화번호 문자열 key 저장
            Map<String, Integer> map = new HashMap<>();
    
            for(int i = 0; i < phoneBook.length; i++) {
                map.put(phoneBook[i], i);
            }
    		
            //각 전화번호의 접두사가 HashMap에 존재하는지 확인
            for(int i = 0; i < phoneBook.length; i++) {
                for(int j = 0; j < phoneBook[i].length(); j++) {
                    if(map.containsKey(phoneBook[i].substring(0,j))) {
                        answer = false;
                        return answer;
                    }
                }
            }
    
            return answer;
        }
    }