2012-07-12 28 views

Respuesta

6

entrevista de trabajo de Microsoft/Amazon tipo de pregunta: Este es el pseudocódigo, el código real se deja como ejercicio.

for each char in the string do: 
    if the current char is equal to the next char: 
     delete next char 
    else 
    continue 

return string 

Como más alto nivel, trate (en realidad no la implementación):

for s in string: 
    if s == s+1: ## check until the end of the string 
    delete s+1 
+3

Buena llamada en no dar código exacto (aunque Python es bastante maldito cerca de pseudocódigo ya). –

5

Consejo: el módulo itertools es súper útil. Una de las funciones, en particular, itertools.groupby, podría venir en muy práctico aquí:

itertools.groupby (iterable [, clave])

Hacer un iterador que devuelve las llaves y grupos consecutivos de el iterable. La clave es una función que calcula un valor clave para cada elemento . Si no se especifica o es Ninguno, la clave se predetermina a una función de identidad y devuelve el elemento sin cambios. En general, el iterable necesita estar ya ordenado en la misma función clave.

Así que ya que las cadenas son iterable, lo que podría hacer es:

use groupby to collect neighbouring elements 
extract the keys from the iterator returned by groupby 
join the keys together 

el que todo se puede hacer en una línea limpia ..

1

1 de GroupBy. Fruto de la casualidad, algo así como:

from itertools import groupby 
def remove_dupes(arg): 
    # create generator of distinct characters, ignore grouper objects 
    unique = (i[0] for i in groupby(arg)) 
    return ''.join(unique) 

cocina para mí en Python 2.7.2

1

En primer lugar, no se puede quitar nada de una cadena en Python (google "Python cadena inmutable" si esto no está claro).

primera aproximación M sería:

foo = '12233322155552' 
bar = '' 
for chr in foo: 
    if bar == '' or chr != bar[len(bar)-1]: 
     bar += chr 

o, usando los itertools insinúan desde arriba:

''.join([ k[0] for k in groupby(a) ]) 
0
t = '12233322155552' 
for i in t: 
    dup = i+i 
    t = re.sub(dup, i, t) 

Puede obtener una salida final como 1232152

5
import re 
answer = re.sub(r'(\d)\1+', r'\1', '12233322155552') 
0
number = '12233322155552' 
temp_list = [] 


for item in number: 
    if len(temp_list) == 0: 
     temp_list.append(item) 

    elif len(temp_list) > 0: 
     if temp_list[-1] != item: 
      temp_list.append(item) 

print(''.join(temp_list)) 
3

Puede utilizar itertools, aquí es el revestimiento

>>> s = '12233322155552' 
>>> ''.join(i for i, _ in itertools.groupby(s)) 
'1232152' 
Cuestiones relacionadas