Bei einer Zeichenfolge S und Q-Abfragen enthält jede Abfrage eine Zeichenfolge T. Die Aufgabe wird "Ja" gedruckt, wenn T Teilfolge von S ist, andernfalls "Nein" drucken. Ich versuche, Algorithmen zu lernen und sie zu implementieren. Ich habe den Code unten in Java geschrieben:Abfragen auf Teilfolge von Zeichenfolge
import java.util.Stack;
public class QueriesOnStringSubsequence {
public boolean subSequence(String original, String query) {
Stack<Character> s1 = new Stack<Character>();
Stack<Character> s2 = new Stack<Character>();
for (int i = 0; i < original.length(); i++) {
s1.push(original.charAt(i));
System.out.println(s1.peek());
}
for (int i = 0; i < query.length(); i++) {
s2.push(query.charAt(i));
System.out.println(s2.peek());
}
while (!s1.isEmpty() || !s2.isEmpty()) {
Character s1Top = s1.peek();
Character s2Top = s2.peek();
if (s1Top == s2Top) {
s1.pop();
//System.out.println(i);
s2.pop();
return true;
}
System.out.print("True");
}
System.out.print("False");
return false;
}
public static void main(String[] args) {
QueriesOnStringSubsequence ob = new QueriesOnStringSubsequence();
ob.subSequence("geeksforgeeks", "gg");
}
}
Ich habe versucht, diese und in Eclipse zu debuggen und es wird nicht in den Zustand, wenn gehen. Kann mir bitte jemand erklären, wo ich falsch liege?
Funktioniert es mit 's1Top.equals (s2Top)'? – Marvin
Nein, es funktioniert nicht mit dieser – user6622569
Sie pushed alle Elemente von "Original" und "Abfrage" in Stapeln, so dass was an der Spitze des Stapels das letzte Element jeder Zeichenfolge ist. Wenn Sie 'peek()' verwenden, vergleichen Sie 's' und' g', und deshalb geben Sie das 'if' nicht ein und bleiben in einer Endlosschleife. –