stackguru Ответов: 1

Как преобразовать строку в палиндром, при условии, что подстрока должна существовать в строке палиндрома ?


Given a String S1 and String S2. Convert string S1 to a palindrome string such S2 is a substring of that palindromic string. This conversion must be done by using minimum number pf operations.
              You are allowed to use only one operation in which you can replace any character of string S1 with any other character. his operation can be used any number of times.

I have written normal code to make it as palindrome by replacing characters. I'm not getting how to write the logic to replace substring elements in string.
1) n = "aaaaa" and string (substring) m = "bbb" and the output has to be 3, because three changes are needed to make string abbba in this case.
2)  test="abcdefggfedcba" , sub_string="ifg". sub_string not present in test. But portion of sub_string it exists test. So, here have to change just two characters ('e' from efg/gfe) that would be palindrome and ensuring sub_string in test as well. What's efficient way to handle it ? I see, str.find(sub_string). But it's hard to find as in above case. Any thoughts ?


Что я уже пробовал:

string1 = "rstutir"
#string1 = list(string1)
sub_string = "abc"
if string1 == string1[::-1]:
   if sub_string in string1:
      print("Valid palindrome and sub string exists")   
   else:
        # How to make sure sub_string exists in string
        # with less number of operations
else:
   count = 0
   for i in range(len(string1)//2): 
        if(string1[i]== string1[n-i-1]): 
            continue

        count += 1
  
        if(string1[i]<string1[n-i-1]): 
            string1[n-i-1]= string1[i] 
        else: 
            string1[i]= string1[n-i-1]

1 Ответов

Рейтинг:
0

Patrice T

Цитата:
Но его трудно найти, как и в вышеприведенном случае. Есть какие-нибудь мысли ?

Не пытайтесь найти магический трюк, для такой проблемы используйте грубую силу.
Грубая сила заключается в том, чтобы испробовать все возможности.

for any possible position of s2 in s1
  reset changes counter
  do necessary changes to have s2 in s1
  do necessary changes to make s1 a palindrome (without changing the place holding s2)
  if changes is better than previous tries, set the new minimum.

[обновление]
Цитата:
Как вам удается это "любое возможное положение s2 в s1" ?

С тестовыми="abcdefggfedcba" , подстрока="ИФГ"
for any possible position of s2 in s1

дает
ifgdefggfedcba
aifgefggfedcba
abifgfggfedcba
abcifgggfedcba
abcdifggfedcba
abcdeifgfedcba
abcdefifgedcba
abcdefgifgdcba
abcdefggifgcba
abcdefggfifgba
abcdefggfeifga
abcdefggfedifg

Цитата:
Если длина подстроки очень велика, а затем большую часть времени я проверяю, какая часть подстроки существует. правильно ? Есть какой-нибудь эффективный способ ? Каким может быть решение ?

Нет никакой магии, если есть лучший способ, вам нужно хорошо знать проблему, и экспериментировать с различными решениями и посмотреть, что работает лучше всего.
Что является лучшим решением для этого
test="abcfgfaba" , sub_string="ifg"
test="abcfgfaba" , sub_string="gfi"


stackguru

@Patrice T : Спасибо, что ответили. Каков будет наилучший подход ?
Если длина подстроки очень велика, а затем большую часть времени я проверяю, какая часть подстроки существует. правильно ? Есть какой-нибудь эффективный способ ? Каким может быть решение ?

stackguru

Выше второй пример-это мое предположение, мышление за пределами того, что предусмотрено. Может быть, я тоже ошибаюсь. Два примеры 1) Тест="abcdfg", подстрока="АБ" , операции будет 3, заключительная строка = abccba или abddba
2) test = "aaaaa", sub_string = "bbb" и выход должен быть 3, потому что в этом случае необходимо внести три изменения в строку abbba.

stackguru

Как вам удается это "любое возможное положение s2 в s1" ?
Если С2 = "АБВГД", возможности ['Азбука','Азбука','кор','АБ','Н','компакт'] . Как прийти к этим возможностям ? Нам действительно нужно беспокоиться об этих делах ?

stackguru

выдвигаю свои предположения. Если вы чувствуете какие-то другие лучшие решения, я буду рад узнать.

stackguru

Я не получил понятия "для любого возможного положения s2 в s1"

Patrice T

ifgdefggfedcba
aifgefggfedcba
abifgfggfedcba
abcifgggfedcba
abcdifggfedcba
abcdeifgfedcba
abcdefifgedcba
abcdefgifgdcba
abcdefggifgcba
abcdefggfifgba
abcdefggfeifga
abcdefggfedifg

stackguru

Я имел в виду, как вы получаете эти возможности ? отслеживание количества замененных элементов ?

stackguru

есть какие-нибудь мысли ?