如何检查最大可能的回文整数



我正在做一个任务,它要求我使用一个函数,它有两个参数:字符串形式的整数,例如'1921',以及整数k,例如2。该函数返回可以通过将输入数字的最多 k 位数字更改为任何其他数字 0-9 来找到的最大可能回文整数。

例如,对 1921 最多有两个变化,最大可能的回文数是 1991(一个变化 2 -> 9(。如果我们有三个变化,我们将得到从 1921 到 9999,这是四位数的最高整数值。

我相信我使用的代码会检查该数字是否是回文,但并没有给我我能得到的最大回文。

使用的代码:

def Is_palindrome(str):
x = 0 
for i in range (len(str)/2):
if (str[x]) == (word[len(str)-x-1]):
x+=1
if x == (len(str)/2):
return True
return False
def longest_palindrome(str):
lst = str.split() 
palindromes = [] #List that contains the palindromes
long_len = 0 #Length of the longest palindrome
longest = "" #The actual longest palindrome
for i in lst: 
if Is_palindrome(i): #If the str is a palindrome
palindromes.append(i) #Add it to the palindrome list
for i in palindromes: #Loop through the palindrome list
if len(i) > long_len: #If the palindrome is longer than the 
longest one
longest = i #Set it as the longest one
longest_len = len(i) # Set the length of the longest one to 
the length of this one
return longest

如果您有任何建议,请告诉我!!提前谢谢。

请尝试以下代码:

import sys
def maximumPalinUsingKChanges(str, k):
palin = []
a = 0
b = len(str)
while (a < b):
palin.append(str[a])
a = a + 1
# Iinitialize l and r by leftmost and
# rightmost ends
l = 0
r = len(str) - 1
#  first try to make string palindrome
while (l < r):
# Replace left and right character by
# maximum of both
if (str[l] != str[r]):
palin[l] = max(str[l], str[r])
palin[r] = max(str[l], str[r])
k = k - 1
l = l + 1
r = r - 1    
# If k is negative then we can't make
# string palindrome
if (k < 0):
print("Not possible")
return "Not possible"
l = 0
r = len(str) - 1
while (l <= r):
# At mid character, if K>0 then change
# it to 9
if (l == r):
if (k > 0):
palin[l] = '9'
# If character at lth (same as rth) is
# less than 9
if (palin[l] < '9'):
#If none of them is changed in the
#  previous loop then subtract 2 from K
# and convert both to 9 
if (k >= 2 and palin[l] == str[l] and palin[r] == str[r]):
k -= 2
palin[l] = '9'
palin[r] = '9'
#  If one of them is changed in the previous
#  loop then subtract 1 from K (1 more is
#  subtracted already) and make them 9  
elif (k >= 1 and (palin[l] != str[l] or palin[r] != str[r])):
k = k - 1
palin[l] = '9'
palin[r] = '9'
l = l + 1
r = r - 1
print(''.join(palin))
return ''.join(palin)

确保 k 是整数而不是字符串

相关内容

  • 没有找到相关文章

最新更新