[プログラマー]ハッシュ(Hash)電話番号リストJava


[Algo Rhythm🕺💃]
難易度:レベル2

1.質問


|問題の説明


電話帳の電話番号の中に、別の番号のプレフィックスがあるかどうかを確認します.電話番号が次の場合:
  • 救助隊:119
  • 朴俊英:9767423
  • 池霊石:119552421
  • 電話帳の電話番号が電話番号の配列phone bookをソリューション関数のパラメータとする場合、ある番号が別の番号の接頭辞である場合は、falseでない場合はtrueを返します.

    |制限


    phone bookの長さは1000000を超えない.
    各電話番号の長さは1または20以下です.

    |I/O例



    |I/O例説明


    I/O例#1


    前に述べたように.

    I/O例#2


    答えはtrueです.1つの番号が別の番号の接頭辞ではないからです.

    I/O例#3


    1番目の電話番号「12」は、2番目の電話番号「123」のプレフィックスである.だから、答えはfalseです.

    2.最終アルゴリズムby Yoon


  • outer for文:配列全体を検索すると、各配列は標準値になります.

  • Inner for Moon:アレイ全体を検索するときに比較します.

  • 接頭辞の比較
    3.1外部が文であり、内部が文であるインデックスが同時に続く.
    3.2基準値の文字列長が比較対象の文字列長より大きい場合、続行する.
    3.3所定の条件を満たす場合、returnfalse
  • 3.ソースコード


    1)初回試行(失敗)

    class Solution {
        public boolean solution(String[] phone_book) {
            boolean answer = true;
            
            for(int i = 0; i < phone_book.length; i++){
                for(int j = 0; j < phone_book.length; j++){
                    if(i == j) continue;
                    if(phone_book[j].substring(0, phone_book[i].length()).equals(phone_book[i])){
                        return false;
                    }
                }
            }
            
            return answer;
        }
    }

    合計:30.8/100.0


    2)2回目の試み(成功)

    class Solution {
        public boolean solution(String[] phone_book) {
            boolean answer = true;
            
            for(int i = 0; i < phone_book.length; i++){
                for(int j = 0; j < phone_book.length; j++){
                    if(i == j) continue;
                    if(phone_book[i].length() > phone_book[j].length()) continue;
                    if(phone_book[i].equals(phone_book[j].substring(0, phone_book[i].length()))){
                        return false;
                    }
                }
            }
            
            return answer;
        }
    }

    4.感じ


    失敗した場合、例外を考え出すことが大切らしい.
    残念なことにHash問題は、Hashで解決されていません!:-)