Sequencia de chars comum em 2 strings

3 respostas
M

Ola a tds!

Tou com uns problemas que n consigo resolver. Preciso de um metodo que receba 2 strings e retorne a maior sequencia de chars comum nessas 2 strings. O metodo tem que ser recursivo. O que fiz foi

public static String sequencia (String a, String b) {
		return sequencia(a,b,0);
	}
	
	public static String sequencia(String a, String b, int n) {
		if (n == a.length() || n == b.length())
			return "";
		if (a.charAt(n) == b.charAt(n)) {
			System.out.println("encontra " + a.charAt(n) + " na pos " + n);
			return a.charAt(n) + sequencia(a,b,n+1);
		}
		else return sequencia(a,b,n+1);
	}

Obrigado desde ja

3 Respostas

N

Oi, experimenta ai…

public static String MaxSeq(String a, String b){
       String maxs = "";
       String aux = "";
       int i,j;
       j = a.length();
       for(i=0; i<a.length();i++){
         for(j=a.length();j>=i;j--){ 
            aux = a.substring(i,j);
            if (b.indexOf(aux) >= 0){
                if (aux.length() > maxs.length()){
                    maxs = aux;
                }
            }
         }
       }
       return maxs;
    }
M

Obrigado nik2007. Funciona optimamente, mas de facto o que precisava era mm de um metodo recursivo!
Mas valeu!
Mt obrigado, vai dar jeito:P

N

Ok, ai vai um modelo modificado para usar recursividade:

public static String MaxSeq2(String a,String b,String maxs){
       String aux = "";
       String cad = "";
       int i;
    
       for(i=0;i<a.length();i++){
         aux = a.substring(i,a.length()-1);
         if (b.indexOf(aux) >= 0){
            if(aux.length() > cad.length()){
              cad = aux;
            } 
            if (cad.length() > maxs.length()){
                maxs = cad;
            }
            
         }
       }
       
       if (a.length() > 1){
          maxs = MaxSeq2( a.substring(1,a.length()-1), b, maxs);
       }    
       return maxs;
    }
Criado 16 de maio de 2007
Ultima resposta 17 de mai. de 2007
Respostas 3
Participantes 2