网易笔试0928

第一题

题意

给一堆以空格分割的字符串,将这些字符串重新排列,在保证出现顺序的前提下字典序要尽可能的小。(如果不懂题目意思请看示例)

输入描述

第一行输入一行以空格分割的字符串

输出描述

输出去重后的字符串列表,在保证出现顺序的前提下字典序要尽可能的小。

示例

input: seo optimization seo tutorial seo tutorial
output: optimization seo tutorial

input: apple banana orange apple banana grape orange
output: apple banana grape orange

思路

首先对输入进行去重,并记录该词首次出现位置first及最后出现位置last,然后对去重后的数据按字典序进行排序。

接下来对字典序的数据进行查询,保证元素的相对顺序和输入数据的相对顺序一致。

代码

自己写的python代码:

data = input().split()


first = {}
last = {}
temp = []

for i in range(len(data)):
    if data[i] not in temp:
        temp.append(data[i])
        first[data[i]] = i
    last[data[i]] = i
temp.sort()

idx = 0
while idx < len(temp) - 1:
    if first[temp[idx]] > last[temp[idx+1]]:
        re = temp[idx]
        temp[idx] = temp[idx+1]
        temp[idx+1] = re
        idx -= 1
    else:
        idx += 1
    
print(temp)

代码可能存在bug

第二题

题意

给一个字符串x代表一个数字,x的长度小于等于一百万。求一个最小的y(可能超过long的表示范围且y必须大于等于0),使得x加上y是回文串。

输入描述

第一行输入x输出描述输出最小的y,使得x+y是回文串。

输出描述

输出最小的y,使得x+y是回文串。

示例

input: 96
output: 3
  
input: 3
output: 0

思路

取左边字段和右边字段,进行翻转比较。注意y必须大于0.

代码

data = '12345'


n = len(data)

if n != 1:
    length = n // 2
    left = data[:length]
    left_re = left[::-1]
    
    if n % 2 == 1:
        right = data[length+1:]
        right_re = right[::-1]
    else:
        right = data[length:]
        right_re = right[::-1]
        
    
    if int(left_re) > int(right):
        y = int(left_re) - int(right)
    elif int(left_re) < int(right):
        if n % 2 == 1:
            y = (int(right_re) - int(left)) * (10 ** (1 + length))
        else:
            y = (int(right_re) - int(left)) * (10 ** (len(left)))
    elif int(left_re) == int(right):
        y = 0
else:
    y = 0
    

代码可能存在bug

全部评论

相关推荐

1 3 评论
分享
牛客网
牛客企业服务