填满每个“。”后,按字典顺序打印最小的回文。字符,如果可以构造一个。在python中以其他方式打印-1

时间:2018-10-01 15:02:33

标签: python

我可以在C ++中完成相同的任务;但是我正在新学习python,我只是想尝试一下我在C ++中使用的类似代码-但是我在此代码中遇到了一些问题,请您帮我解决我的错误;

 def constructPalin(string,length):
  i = 0
  j = length - 1; 
  while(i < j):
    if (string[i] == string[j] and string[i] != '.'):
        continue
    elif (string[i] == string[j] and string[i] == '.'):
        string[i] = 'a'
        string[j] = 'a' 
        continue 
    elif (string[i] == '.'):
        string[i] = string[j]
        continue 
    elif (string[j] == '.'):
        string[j] = string[i]
        continue
    else:
        string="-1"
        return string
    i=i+1
    j=j-1
  return string
string=input() 
length = len(string)
string=constructPalin(string,length)
print(string)

我只能得到-1的正确输出;在其他情况下可以帮助我

2 个答案:

答案 0 :(得分:0)

如果第一个和最后一个字符串匹配,则其索引值应得到更新!

if (string[i] == string[j] and string[i] != '.'):
    i=i+1
    j=j-1

答案 1 :(得分:0)

首先,Python不允许您修改字符串(它们是“不可变的”),但是您可以将它们变成列表,进行修改,然后再将它们变成字符串。看起来很困难或很慢,但根本没有。

第二,很少使用Python中的“继续”。一个好的代码不应该拥有它。这就是为什么毕竟有elif的原因。

第三,如果您在其中没有做任何事情,请不要使用'if'。

第四,学习python技巧(例如下面的==或=行),这是与其他语言的真正区别。在大多数情况下,使代码更清晰。

欢呼

def constructPalin(string, length):
    i = 0
    j = length - 1
    string = list(string)  # turn it to list, as strings can't be modified
    while (i <= j):  # '<=' to consider a '.' in the middle
        # if (string[i] == string[j] and string[i] != '.'):  # only use 'if' when you need to
        if (string[i] == string[j] == '.'):  # both equal to '.'
            string[i] = string[j] = 'a'  # turn them to 'a'
        elif string[i] != string[j]:  # not equal, can still be fixed filling the '.'s?
            if (string[i] == '.'):
                string[i] = string[j]
            elif (string[j] == '.'):
                string[j] = string[i]
            else:  # hopeless
                string = "-1"
                return string
        i = i + 1  # if you use "continue", you'll never reach these lines
        j = j - 1  # ... and the program loops forever
    return "".join(string)  # turn it back to string