2011-03-22 13 views
7

Para esta pregunta, un "par" en una cadena se define como una situación donde dos instancias de un carácter están separadas por otro carácter. Entonces en "AxA" los A hacen un par. Los pares se pueden superponer, por lo que "AxAxA" contiene tres pares; dos para A y uno para x.¿Cómo puedo contar el número de apariciones de un patrón simple en una cadena?

Otros ejemplos:

countPairs ("AXA") → 1
countPairs ("axax") → 2
countPairs ("AxBx") → 1

me pidieron cómo calcule el número de pares en una cadena dada en una entrevista de ayer, y no estoy seguro de cómo hacerlo.

+0

Lástima que tengo algo que hacer: - /. Es una pregunta bastante interesante. – helpermethod

+0

@Helper Method.i no te atrapó. Cuando indicaste que no pude resolverlo. – Deepak

Respuesta

10

Una solución O (n) sería iterar la cadena (de 0 a length-2) y (utilizando charAt(..)) para verificar si el carácter actual es igual a current+2. Si es así, incrementar una variable de pairsCount

int pairsCount = 0; 
for (int i = 0; i < str.length() - 2; i ++) { 
    if (str.charAt(i) == str.charAt(i + 2)) { 
     pairsCount ++; 
    } 
} 
+0

¿Puedo tener el ejemplo lógico por favor? Estoy atascado con esto desde la mañana. – Deepak

+0

+1, este fue mi primer pensamiento también. – Pops

+0

@Deepak - acaba de agregar un código – Bozho

3

El awser anterior no convertir el hecho de que el caracter en el medio (separador) debe ser diferente.

Para esta pregunta, un "par" en una cadena se define como una situación en la que dos instancias de un carácter están separados por otro personaje. Entonces en "AxA" los A hacen un par. Los pares se pueden superponer, por lo que "AxAxA" contiene tres pares; dos para A y uno para x.

¿Estos caracteres deben ser diferentes? Aquí lo que pensé si tiene que ser diferente ...

int trueNbPair =0; 
    for (int i=1;i<str.length()-1;i++) 
    { 
     char prev = str.charAt(i-1); 
     char current = str.charAt(i); 
     char next = str.charAt(i+1); 

     if (prev == next && current!= prev) 
     { 
      trueNbPair++; 
     } 
    } 
+0

buena captura. Supuse que AAA también se considera un par. Pero podría ser al revés. – Bozho

Cuestiones relacionadas