Top.Mail.Ru

Перечень алгоритмов

20. Строки. Найти символы, которые встречаются ровно один раз

st ="12345abcdefgh114895defgh"

Способ № 1 Использование двойного цикла

k=0
l=''
for i in range (len(st)):
   for j in range (len(st)):
       if st[i] == st[j] and i != j:
                         k+=1
   if k == 0:
       l += st[i]
   else:
       k =0
print(l)

# 23abc89
Временная сложность: O (n*n)

Способ № 2 Использование функций ord и chr

s=[0]*1000
for x in st:
     s[
ord(x)]+=1
for i in range (len(s)):
    
if s[i] == 1:
      
print(chr(i), end = "")

# 2389abc
Временная сложность: O (n*n1)
где n - длина входной строки,
n1 - длина списка s

 

Способ № 3 Использование метода count()

m=[]
for x in st:
    
if x not in m and st.count(x) == 1:
           m.append(x)
          
print("".join(x), end ='')

# 23abc89
Временная сложность: O (n)

 

Способ № 4 Использование функции lambda()

m = filter(lambda x: st.count(x) == 1, st)
print(''.join(set(m)))

#89ac3b2
Временная сложность: O (n)

 

Способ № 5 Использование словаря и множества

d={x: st.count(x) for x in sorted(set(st))} # создаем словарь

# проходим по словарю и определяем ключ значения ==1
for x in d:      

   if d[x] == 1:
      
print(x, end = '')


# 2389abc
Временная сложность: O (n)