Для строки, такой как "12233322155552", удалив дубликаты, я могу получить "1235". Но я хочу сохранить "1232152", только удаляя последовательные дубликаты.
Благодарим вас за помощь.
Для строки, такой как "12233322155552", удалив дубликаты, я могу получить "1235". Но я хочу сохранить "1232152", только удаляя последовательные дубликаты.
Благодарим вас за помощь.
Microsoft/Amazon job interview тип вопроса: Это псевдокод, фактический код оставлен как упражнение.
for each char in the string do:
if the current char is equal to the next char:
delete next char
else
continue
return string
Как более высокий уровень, попробуйте (не на самом деле реализацию):
for s in string:
if s == s+1: ## check until the end of the string
delete s+1
Подсказка: модуль itertools является супер-полезным. Одна из функций, в частности itertools.groupby, может пригодиться здесь:
itertools.groupby(iterable [, key])
Сделайте итератор, который возвращает последовательные ключи и группы из истребитель. Ключ - это функция, вычисляющая значение ключа для каждого элемент. Если не указано или нет, по умолчанию по умолчанию используется идентификатор и возвращает элемент без изменений. Как правило, итерабельный необходимо уже сортировать по одной и той же ключевой функции.
Итак, поскольку строки являются итерабельными, вы можете сделать следующее:
use groupby to collect neighbouring elements
extract the keys from the iterator returned by groupby
join the keys together
который может быть выполнен в одной чистой строке.
import re
answer = re.sub(r'(\d)\1+', r'\1', '12233322155552')
Вы можете использовать itertools
, вот один лайнер
>>> s = '12233322155552'
>>> ''.join(i for i, _ in itertools.groupby(s))
'1232152'
Прежде всего, вы не можете удалить что-либо из строки в Python (google "неизменяемая строка Python", если это не ясно).
М первый подход:
foo = '12233322155552'
bar = ''
for chr in foo:
if bar == '' or chr != bar[len(bar)-1]:
bar += chr
или, используя подсказку itertools сверху:
''.join([ k[0] for k in groupby(a) ])
+1 для groupby. С манжетой, что-то вроде:
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)
Куки для меня в Python 2.7.2
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))
Если это вопрос интервью, то в Java решение:
public class Test2 {
public static void main(String[] args) {
String a = "12233322155552";
// The output : 1232152
StringBuffer sbr = new StringBuffer();
int i = 0 ;
while( i < a.length() ) {
if(sbr.length() == 0) {sbr.append(a.charAt(i));}
if( a.charAt(i) == sbr.charAt(sbr.length() -1)) {i++ ;}
else {
sbr.append(a.charAt(i)); i++;
}
}//while
System.out.println(sbr);
}
}
IN Python:
def fix(a):
list = []
for element in a:
# fill the list if the list is empty
if len(list) == 0:list.append(element)
# check with the last element of the list
if list[-1] != element: list.append(element)
print(''.join(list))
a= 'GGGGiiiiniiiGinnaaaaaProtijayi'
fix(a)
t = '12233322155552'
for i in t:
dup = i+i
t = re.sub(dup, i, t)
Вы можете получить окончательный результат как 1232152