国庆节最后一天,明天就要上班了,闲来无事做做百度2014笔试题,好久没用过C++了,索性就用python简单的写一下,体验下题目难度。题目是从【大卫David】那里copy过来的。

1、给定任意一个正整数,求比这个数大且最小的“不重复数”,“不重复数”的含义是相邻两位不相同,例如1101是重复数,而1201是不重复数。(15分)

2、长度为N(N很大)的字符串,求这个字符串里的最长回文子串。(15分)

3、数轴上从左到右有n各点a[0], a[1], ……,a[n -1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。(15分)

流程都是A介绍思路,B贴出代码,代码写的也不是很漂亮,凑凑活活贴下

一:

A.获取输入base的位数,然后分为两种情况,情况1是在该位数下寻找所需要的最小不重复数,情况2是在比该位数+1的位数下找最小不重复数

情况2比较简单,就是1010...的罗列,一直到满足位数要求,情况1也就是从base+1开始挨个判断。。。感觉就这么简单,没有想什么高深的算法,

如果理解错了同志们轻拍。。

B.代码

   #!/bin/env/python
# -*- encoding:utf- -*-
#Filename: .py import sys def Get_base_out(num, length):
'''Get_base_out method'''
for i in range(int(num)+, **length):
result = Judge(i, length)
if result == True:
return i
return - def Get_base1_out(num, length):
'''Get_base1_out method'''
no_repeated_num = str()
for i in range(,length):
if i % == :
no_repeated_num += ''
else:
no_repeated_num += ''
return no_repeated_num def Judge(suspect, length):
''' Judge method'''
temp = str(suspect)
for i in range(,length-):
if temp[i] == temp[i+]:
return False
return True if __name__ == "__main__":
for line in sys.stdin:
base = line.strip()
length = len(base)
court = Get_base_out(base, length)
if court == -:
court = Get_base1_out(base, length)
print court

二:

A.既然找东西,肯定都遍历一遍喽,那只有想办法在一遍遍历中就完成任务,计划用两个变量分别存储回文自串的位置和回文字串的长度。从头到尾遍历

判断下就完事。

B.代码:

注:没写123321这种类型的回文自串,方法一样就得再敲点代码

python有个好处,就是列表负向不会越界,HoHo~

   #!/bin/env/python
# -*- encoding:utf- -*-
#Filename: .py import sys def Find_point(base, index):
'''Find point method'''
rt_point = -
if base[index-] == base[index+]:
rt_point = index
return rt_point def Get_length(base, point, length):
'''Get huiwen length'''
rt_len = -
for i in range(, (length+)/):
if point - i >= and point + i < length:
if base[point-i] == base[point+i]:
rt_len = i
else:
break
else:
break
return rt_len def Get_huiwen(init_in):
'''Get huiwen'''
base = str(init_in)
length = len(base)
huiwen_point = -
huiwen_len = -
for i in range(, length - ):
tmp_point = -
tmp_len = -
tmp_point = Find_point(base, i)
if tmp_point != -:
tmp_len = Get_length(base, tmp_point, length)
if tmp_len > huiwen_len:
huiwen_point = tmp_point
huiwen_len = tmp_len
if huiwen_point == - and huiwen_len == -:
return "None"
start = huiwen_point - huiwen_len
end = huiwen_point + huiwen_len +
return base[start:end] if __name__ == "__main__":
for line in sys.stdin:
arg = line.strip()
rt_value = Get_huiwen(arg)
print "base:\n%s\nhuiwen:\n%s" % (arg, rt_value)

肚子咕咕叫了,下次补第三题。。。

05-21 05:02