[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]と一致するかどうかを確認することによって解決される.Reference
この問題について([programmers]電話帳), 我々は、より多くの情報をここで見つけました https://velog.io/@easttwave/Programmersテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol