Ich bin die Erforschung, wie k-Werte in der BST zu finden, die das Ziel am nächsten sind, und kam über die folgende Umsetzung mit den Regeln ‚?‘Java: Wie wird der Wildcard-Abgleich implementiert?
Entspricht einem einzelnen Zeichen.
'*' Entspricht einer beliebigen Zeichenfolge (einschließlich der leeren Sequenz).
Die Übereinstimmung sollte die gesamte Eingabezeichenfolge abdecken (nicht teilweise).
sollte Der Funktionsprototyp sein: Bool IsMatch (const char * s, const char * p)
Einige Beispiele:
IsMatch ("aa", "a") → falsche
IsMatch ("aa", "aa") → wahre
IsMatch ("aaa", "aa") → falsch
IsMatch ("aa", "*") → wahr
IsMatch ("aa", "a *") → wahre
IsMatch ("ab", "*?") → wahre
IsMatch ("aab", „c a b „) → falsch
Code:
import java.util.*;
public class WildcardMatching {
boolean isMatch(String s, String p) {
int i=0, j=0;
int ii=-1, jj=-1;
while(i<s.length()) {
if(j<p.length() && p.charAt(j)=='*') {
ii=i;
jj=j;
j++;
} else if(j<p.length() &&
(s.charAt(i) == p.charAt(j) ||
p.charAt(j) == '?')) {
i++;
j++;
} else {
if(jj==-1) return false;
j=jj;
i=ii+1;
}
}
while(j<p.length() && p.charAt(j)=='*') j++;
return j==p.length();
}
public static void main(String args[]) {
String s = "aab";
String p = "a*";
WildcardMatching wcm = new WildcardMatching();
System.out.println(wcm.isMatch(s, p));
}
}
und meine Frage ist, was ist der Grund für zwei zusätzliche Indizes mit, ii
und 012., und warum werden sie mit -1
initialisiert? Was ist der Zweck von jedem? Würde es nicht mit i
und j
genug sein?
Und was ist der Zweck der ii=i;
und jj=j;
im ersten Fall, wenn, und i=ii+1;
und j=jj;
im dritten wenn Fall?
Schließlich, in welchem Fall würden Sie auf while(j<p.length() && p.charAt(j)=='*') j++;
stoßen?
Beispiele wären extrem hilfreich beim Verständnis. Vielen Dank im Voraus und akzeptieren die Antwort/Abstimmung.
Sind Sie versuchen, neu zu erfinden das Rad der RegExp? Oder vorgefertigte RegExp von Java zur Verfügung gestellt wird für Sie tun? – Arvind
@Arvind Für Algo-Praxis implementiere ich als solche. –
Sie könnten in Apache Lucene schauen, wenn Sie wirklich einen einfacheren Weg dazu wollten –