Ecco lo scenario, Dato una parola rimuovere un singolo carattere da una parola in ogni passaggio in modo tale che la parola ridotta sia ancora una parola in dizionario. Continua finché non vengono lasciati caratteri.Algoritmo per rimuovere un carattere da una parola tale che la parola ridotta sia ancora una parola nel dizionario
Ecco il codice: È necessario rimuovere il carattere corretto, ad es. in una parola possono esserci due possibili caratteri che possono essere rimossi e entrambi possono far sì che la parola ridotta sia una parola valida, ma in una fase successiva si può ridurre alla fine, cioè non rimangono caratteri mentre l'altro può riagganciare.
Esempio:
- pianeta
- pianta
- mutanda
- vaschetta
- un
- un
O
- pianeta
- piano
- corsia
- non è possibile ulteriormente, supponiamo lan non è una parola. spero che tu abbia avuto l'idea.
Si prega di consultare il mio codice, im utilizzando la ricorsione, ma vorrei sapere se ci sono soluzioni efficienti migliori per fare lo stesso.
public class isMashable
{
static void initiate(String s)
{
mash("", s);
}
static void mash(String prefix, String s)
{
int N = s.length();
String subs = "";
if (!((s.trim()).equals("")))
System.out.println(s);
for (int i = 0 ; i < N ; i++)
{
subs = s.substring(0, i) + s.substring(i+1, N);
if (subs.equals("abc")||subs.equals("bc")||subs.equals("c")||subs.equals("a")) // check in dictionary here
mash("" + s.charAt(i), subs);
}
}
public static void main(String[] args)
{
String s = "abc";
initiate(s);
}
}
si dovrebbe avere un dizionario (come un 'Map') o qualche altro modo per controllare che la parola reale è ancora una parola valida. Inoltre, dovresti provare a inviare la combinazione di lettere a parola invece di inviare solo sottostringhe di tutta la tua parola. Ad esempio, se invii "pianeta", con il tuo algoritmo non sarai in grado di testare la combinazione 'pet'. –
Esempio di Javascript (attenzione: jsfiddle è un po 'lento): http://jsfiddle.net/BA8PJ/ – biziclop
potresti voler usare un grafico diretto contenente ogni parola come nodo. si crea un bordo dal nodo A al nodo B se è possibile passare da A a B rimuovendo solo una lettera. Per semplificare la creazione del grafico, devi prima testare la lunghezza della parola prima di provare a eliminare una lettera. – Atmocreations