[programmers]電話帳


質問する



トラブルシューティングポリシー


まず、Pythonで問題を解決すればもっと簡単になるという考えは、Pythonユーザーにとって誰でも考えられます.でも私は今c++で問題を解決したいので考えてみました.一番短い文字列を前に並べ、精錬した値でfor loopを1回回転させ、私のほかに文字列と私の文字列の長さが重なる場合は、loopを1回書いて離れてみたいと思います.

コード1


失敗したコード...
#include <string>
#include <vector>
#include <algorithm>
#include <cstring>

using namespace std;

bool solution(vector<string> phone_book) {
    bool answer = true;
    sort(phone_book.begin(), phone_book.end());
    for(int i = 0;i < phone_book.size();i++){
        for(int j = i+1;j < phone_book.size();j++){
            if(i == j) break;
            else if(phone_book[i].find(phone_book[j]) != 0) return false;
        }
    }
    return answer;
}
まずこのように編んだとき問題は解決しなかった.

コード2

#include <string>
#include <vector>
#include <algorithm>
#include <cstring>

using namespace std;

bool solution(vector<string> phone_book) {
    bool answer = true;
    int index = -1;
    sort(phone_book.begin(), phone_book.end());
    for(int i = 0;i < phone_book.size()-1;i++){
        index = phone_book[i+1].find(phone_book[i]);
        if(index >= 0) break;
    }
    if(index < 0) return answer;
    else return false;
}
結局他の草を見ずに自分で解決!!満足するコードをすばやく書き始めたばかりの頃は、まずソートしたいと思っていましたが、後で考えてみると、辞書順にソートした後、隣接する配列をチェックするだけでいいことに気づいたので、そのままコードを書き始めました.問題を解くときに他の人のコードを見て、自分が簡潔に編んだと思った.他の人のコードには思いもよらない関数があるので、整理したいです.

substr

if(phone_book[i] == phone_book[i+1].substr(0, phone_book[i].size))
コードをざっと見ると、substr関数は前のベクトル文字列の部分文字列であり、その大きさはphone book[i]サイズの部分文字列がphone book[i]と一致するかどうかを確認することによって解決される.