|
||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||
java.lang.Objectdemo.Pnouseva
public class Pnouseva
Palauttaa merkkijonosta pisimmän pelkästään kasvavan (samoja tai aakkosissa aina edeltäjäänsä "suurempia" merkkejä sisältävän) merkkijoukon pituuden.
Algoritmi:
==========
Tutkitaan merkkijonon jokaisen merkin kohdalta, kuinka pitkä jono
siitä eteenpäin on kasvavia merkkejä ja palutetaan pisimmän
löytyneen kasvavan jonon pituus.
0. Mennään jonon alkuun.
1. Jos ollaan lopussa palautetaan pisimmän löytyneen kasvavan
jonon pituus ja lopetetaan.
2. Tutkitaan kuinka pitkä kasvava jono alkaa kohdalla olevasta
merkistä.
3. Jos kasvava jono on pitempi kuin tähänastinen pisin, niin
merkataan tämä pisimmäksi.
4. Mennään siihen merkkiin, johon edellinen kasvava jono päättyi
ja jatketaan kohdasta 1.
Syyllinen: Mikko Puhalainen, 18.3.1999
Esim jos
0123456789
abcdabcdea
kohdasta 0 kysytään nousevan pituutta saadaan 4. Jos kohdasta 1 kysytään
nousevan pituutta, saadaan 3, kohdasta 2=>2, 3=1.
Vasta kohdasta 4 alkaen voi tulos jälleen parantua.
Eli siksi loikan pituus kannattaa olla nousevan pituus
Vielä vähän voisi optimoida lopettamalla haku jo ennen jonon päättymistä,
jos nykyistä ennätystä ei voi parantaa.
Huomautti Vesa Lappalainen 19.3.1998
| Constructor Summary | |
|---|---|
Pnouseva()
|
|
| Method Summary | |
|---|---|
static void |
main(java.lang.String[] args)
Testataan pisinNouseva-aliohjelmaa |
static int |
nouseva(java.lang.String jono,
int alku)
Etsitään kuinka monta peräkkäistä "nousevaa" merkkiä on alkaen paikasta alku. |
static int |
pisinNouseva(java.lang.String jono)
Etsitään pisimmän nousevan osajonon pituus merkkijonosta |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public Pnouseva()
| Method Detail |
|---|
public static int nouseva(java.lang.String jono,
int alku)
jono - merkkijonojota tutkitaanalku - paikka josta aloitetaan
nouseva("",0) === 1;
nouseva("a",0) === 1;
nouseva("aa",0) === 2;
nouseva("aab",0) === 3;
nouseva("bab",0) === 1; // NOPMD
nouseva("bab",1) === 2;
nouseva("bab",2) === 1;
nouseva("bab",3) === 1;
public static int pisinNouseva(java.lang.String jono)
jono - tutkittava merkkijono
pisinNouseva("abajiuxc") === 3;
pisinNouseva("kissa") === 3;
pisinNouseva("abcdefg") === 7;
pisinNouseva("dcba") === 1;
pisinNouseva("ab") === 2;
pisinNouseva("a") === 1;
pisinNouseva("") === 0;
public static void main(java.lang.String[] args)
args - ei käytössä
|
||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||