Informatika gyűjtemény

Egy szinttel feljebb ep_tukor.java

2004050607080910

NézetNyomtat

ep_tukor.java (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: utf-8
Méret: 1 KB
class mirror {
    private int MH = 1000;
    private String szo;
    private int maxh[][] = new int[MH][MH];
    private int opt;
    private String opts;
    
    mirror(String s){
    szo = new String(s);
    for(int i = 0; i < MH; i++){
        for(int j = 0; j < MH; j++){
        maxh[i][j] = -1; // inicializálás
        }
    }
    }
    
    public int f(int k, int v){
    if(maxh[k][v]>=0){
        return maxh[k][v];
    } else {
    if( k > v){
        maxh[k][v]=0;
        return 0;
    } else if( k == v){
         maxh[k][v]=1;
         return 1;
    } else {
        if(szo.charAt(k)==szo.charAt(v)){
        maxh[k][v] = 2+f(k+1,v-1);
        return maxh[k][v];
        } else {
        int opt1 = f(k+1,v);
        int opt2 = f(k,v-1);
        if(opt1 < opt2){
            maxh[k][v]=opt2;
            return opt2;
        } else {
            maxh[k][v]=opt1;
            return opt1;
        }
        }
    }
    }
    }
    
    public String g(int k, int v){
    if(> v){
        return "";
    } else if( k == v){
        return szo.substring(k,k+1);
    } else if(szo.charAt(k)==szo.charAt(v)){
        return szo.substring(k,k+1)+g(k+1,v-1)+szo.substring(k,k+1);
    } else if(maxh[k+1][v] > maxh[k][v-1]){
        return g(k+1,v);
    } else {
        return g(k,v-1);
    }
    }
    
    public String toString(){
    return szo;
    }
    
    public void solve(){
    opt = f(0,szo.length()-1);
    opts = new String(g(0,szo.length()-1));
    }
    
    public void ki(){
    System.out.println("A leghosszabb rész-palindrom hossza "+opt);
    System.out.println("A leghosszabb rész-palindrom: "+opts);
    }

    public static void main(String arg[]){
    mirror m = new mirror(arg[0]);
    
    System.out.println(m);
    
    m.solve();
    m.ki();
    }
}
(Vissza)