Ich schreibe eine rekursive Funktion, um alle möglichen Untersequenzen einer Zeichenfolge zu erstellen und die Zeichenfolgen als Vektor zurückzugeben. Dies ist eine Herausforderung durch die Codierung von Ninjas. Ich wiederhole jeden Zeichen in der Zeichenfolge und erzeugte zwei Fälle, unabhängig davon, ob ich das Zeichen beibehalten oder aus der Zeichenfolge löschen möchte. Wenn der Basisfall trifft, wird die generierte Zeichenfolge in den ANS -Vektor hinzugefügt, der alle Teilsequenzen enthält. So sieht mein Code aus: < /p>
Code: Select all
void recurse(string str, string value, int idx, vector &ans){
//base case
if(idx < 0 && !value.empty()){
ans.push_back(value);
return;
}
//keep letter
recurse(str, value, idx-1, ans);
//delete letter
value.erase(idx,1);
recurse(str, value, idx-1, ans);
}
vector subsequences(string str){
vector ans;
string value = str;
recurse(str, value, str.size()-1, ans);
return ans;
}
Dies gibt einen Laufzeitfehler in der IF -Bedingung in der Recurse -Funktion: if (idx
Code: Select all
//base case
if(idx < 0){
if(!value.empty()) ans.push_back(value);
return;
}
Die Bedingung ist erforderlich, damit der letzte leere Zeichenfolge nicht zum ANS -Vektor hinzugefügt wird. Kann jemand erklären, warum beim Überprüfen von 2 Bedingungen zusammen mit && einen Laufzeitfehler angibt, aber wenn Sie sie separat mit einem verschachtelten If -Block überprüfen, läuft es völlig in Ordnung?