Я хочу знать подход о, как я могу compress
строку, как если бы я дал некоторую строку ABCABCABC
, чем я имею в виду, что я могу найти подстроку в ABC
, которая frequently occurs
поэтому он будет сжат как 3ABC
. Другой способ, если строка, такая как ABCABCBC
, приведена здесь ABC
является подстрокой frequently occurring
, поэтому она сжата как 2ABC1BC
. Как вы можете видеть, я рассматриваю только adjacent substrings
.Я хочу знать подход сжать любую строку
-1
A
ответ
0
s='FLFLAFLAFLAF'
def check(str_check,str):
try:
index=str.index(str_check)
except Exception:
index=9999
return index
def max_index(i,j,sub_str):
if(i>=0 and j<=len(count)):
try:
j=count.index(max(count[i:j]))
except Exception:
j=-1
try:
sub_str_index=int(sub_str.index(sub_list[j]))
except Exception:
sub_str_index=-1
temp=int(count[j])
if len(sub_str)==0:
return ""
elif(count[j]==1 or int(count[j])*len(sub_list[j])>len(sub_str)):
for i in range (len(sub_str)):
count[j+i]=0
return "1"+ sub_str
else:
#count[j]=0
return max_index(0,sub_str_index,sub_str[0:sub_str_index]) + str(temp) + sub_list[j] + max_index(len(sub_str[0:sub_str_index])+(int(temp)*len(sub_list[j])),len(sub_str),sub_str[len(sub_str[0:sub_str_index])+(int(temp)*len(sub_list[j])): len(sub_str)])
sub_list=sorted(set([s[i:i+j] for j in range(1,len(s)+1) for i in range(len(s)-j+1)]))
length=len(s)
length1=len(sub_list)
count=[]
for i in range (length1):
cnt=0
j=0
while(j<length):
k=check(sub_list[i],s[j:])
if k==9999:
break
if (s[j+k:j+k+len(sub_list[i])]==sub_list[i]):
if(cnt>=1 and s[j+k-len(sub_list[i]):j+k]==sub_list[i]):
j=j+k+1
cnt=cnt+1
elif (cnt==0):
j=j+k+1
cnt=cnt+1
else:
j=length
else:
j=length
count.append(cnt)
print "SUBLIST"
print sub_list
print "count"
count1=count
print count1
j=len(count)
i=0
max_ele=max(count)
while(max_ele in count):
max_in=count.index(max(count[i:j]))
print max_index(i,j,s)
count=count1
count[max_in]=0
+0
"FLFLAFLAFLAF" Если вы дадите этот тип ввода, вы получите выход, как указано ниже: 1FL3FLA1F 1FLF3LAF –
Смежные вопросы
- 1. Как сжать любую картинку?
- 2. Я хочу удалить любую строку по ее идентификатору
- 3. Я хочу знать вывод кода
- 4. Я хочу знать тип переменной
- 5. Я хочу знать команды SQL
- 6. Я хочу знать, что Maven
- 7. при нажатии на строку Я хочу знать точки
- 8. Я хочу сжать изображение в конкретный каталог
- 9. Я хочу сжать видео в android динамически
- 10. Я хочу сжать байт [] и вернуть байт []
- 11. Как я могу выбрать любую другую строку?
- 12. Я хочу знать значение строки в Java
- 13. Я хочу знать о языке шаблонов blogger
- 14. Я хочу знать разницу между './' и '/'
- 15. Я хочу знать цель следующего кода C++
- 16. Я хочу знать использование пути к файлу
- 17. Я хочу знать функцию задержки в C++
- 18. Я хочу знать, как подключить базу данных ........?
- 19. Я хочу знать о команде в Makefile
- 20. Я хочу знать информацию о Progress 4GL
- 21. Я хочу знать поток выполнения файла IPA
- 22. Как визуально знать, какую форму я хочу?
- 23. Я хочу знать теоретические вопросы о программировании
- 24. Я хочу знать, как использовать файл сохранения
- 25. как я могу сжать строку Iphone
- 26. Сжать JSON строку
- 27. Я хочу изменить строку текста
- 28. я хочу сжать файл, в Deflater, но, кажется, не работает
- 29. Я хочу знать, что происходит при выполнении этой команды?
- 30. GridBagLayout сжать строку меню
По принципу Дирихле [] (https://en.wikipedia.org/wiki/Pigeonhole_principle), любой алгоритм сжатия без потерь, что делает некоторые строки короче, будут обязательно делать некоторые другие строки больше. Так что «сжимать любую строку», к сожалению, невозможно. – Kevin
Спасибо Jaimin Mody. Код работает отлично. –