Ci sono 2 aspetti importanti in questo problema.
- Poiché occorre S come una stringa di S2 + retromarcia (S2), S2 dovrebbe avere atleast n/2 lunghezza.
- Dopo concatenazione di S2 e retromarcia (S2), c'è un modello in cui alfabeti ripete come
Quindi la soluzione è di controllare dal centro di S a fine S per ogni elemento consecutivo.Se ne trovi uno, controlla gli elementi su entrambi i lati come mostrato.
Ora, se si è in grado di raggiungere fino alla fine della stringa, quindi il numero minimo di elementi (risultato) è la distanza dall'inizio al punto in cui si trova elementi consecutivi. In questo esempio C i.e 3.
Sappiamo che questo potrebbe non succedere sempre. potreste non essere in grado di trovare elementi consecutivi al centro. Diciamo che gli elementi consecutivi sono dopo il centro, quindi possiamo fare lo stesso test.
stringa principale
Substring
stringa concatenata
Ora arriva t lui maggiore dubbio. Perché consideriamo solo la parte sinistra a partire dal centro? La risposta è semplice, la stringa concatenata è fatta da S + reverse (S). Quindi siamo sicuri che l'ultimo elemento nella sottostringa arriva consecutivamente nella stringa concatenata. Non c'è modo che nessuna ripetizione nella prima metà della stringa principale possa dare un risultato migliore perché almeno dovremmo avere gli alfabeti n nella stringa finale concatenata
Ora la questione della complessità: La ricerca di alfabeti consecutivi dà un massimo di O (n) Ora il controllo degli elementi su entrambi i lati in modo iterativo può fornire la peggiore complessità di O (n). I massimo n/2 confronti. Potremmo fallire molte volte facendo il secondo controllo in modo da avere una relazione moltiplicativa tra le complessità i.e O (n * n).
Credo che questa sia una soluzione corretta e non ha trovato ancora alcuna scappatoia.
fonte
2016-05-10 10:56:31
Una soluzione O (n^3) è accettabile? – Sayakiss
No, ho bisogno di una soluzione migliore di O (n^3). – LTim