英語のドラゴンボール
中に入ると
これは、ベクトル形式でドラゴンの終わりの言葉を与えたとき、何人目が何回目の試合で淘汰されたかという問題です.迎えのルールから外れた瞬間を見つけるのは難しくありませんが、何度目か人を見つけるのはちょっと面倒です.この点を右往左往して、時間を遅らせたようだ.
コードの説明
まず最初にやるべきことは、答えに0と0を加えることです.したがって、すべての単語がルールに合致している場合は、0,0を返します.次に、前の単語の最後の文字と後の単語の最初の小文字を定義します.forを1から回すので、最初の単語の最後の文字を入れておきます.bool型のbはbreakによってルール違反を確認する変数である.turnとidxが並んで何回目と何回目の小数を教えてくれます.
for文は1から始まるので、tmp wに単語[0]を追加します.
for文は、まず現在の単語の最初の文字を最初の文字に配置します.これは前の文字の最後と比較して、両者が同じ文字であるかどうかを確認するためです.tmpには、現在の単語がすでに言っている単語であるかどうかを検索するポインタが含まれています.
ここでifは重要だidxが人数nに等しい場合、これは誰もが単語を1回話したことを意味します.そこでidxはそれを0(最初に入れたときは1、word[0]を入れたので)、turnは++に入れます.ここでidxを1に加算したので、値段が間違っていました.だから中に入った時、私は少しぼんやりしていたと言った.
そして条件通りに探せばいいです.語の接続を終了する条件はfirstがlastと異なることと,重複する値である.この2つの条件下でドラゴンを継続できない場合は、idxを追加してbをfalseにし、breakすることができます.
ドラゴンボールを追加できる場合は、通過した単語をtmp wに入れます.まだ一定です.lastを更新するにはlastは現在通過している単語の最後の文字です.これにより、新しい単語の最初の文字と比較できます.そしてidxをつければいいです.
breakが表示される場合は、答えの値を0、0から他の値に変更します.したがって、bがfalseである場合、答えの最初のアルファベットにidxを加え、最初のアルファベットにturnを加える.
そして答えを返せばいい.
コード#コード#
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
vector<int> solution(int n, vector<string> words) {
vector<int> answer{0, 0};
vector<string> tmp_w;
string last = words[0].substr(words[0].length()-1, words[0].length());
string first = "";
bool b = true;
int turn = 1;
int idx = 1;
tmp_w.push_back(words[0]);
for(int i=1; i<words.size(); i++){
first = words[i].substr(0, 1);
auto tmp = find(tmp_w.begin(), tmp_w.end(), words[i]);
if(idx == n){
idx = 0;
turn++;
}
if(last != first){
idx++;
b = false;
break;
}else if(tmp != tmp_w.end()){
idx++;
b = false;
break;
}else{
tmp_w.push_back(words[i]);
last = words[i].substr(words[i].length()-1, words[i].length());
idx++;
}
}
if(b == false){
answer[0] = idx;
answer[1] = turn;
}
return answer;
}
Reference
この問題について(英語のドラゴンボール), 我々は、より多くの情報をここで見つけました https://velog.io/@jy1999/영어-끝말잇기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol