【Python】:用python作下百度2014筆試題

         國慶節最後一天,明天就要上班了,閒來無事作作百度2014筆試題,很久沒用過C++了,索性就用python簡單的寫一下,體驗下題目難度。題目是從【大衛David】那裏copy過來的。

一、給定任意一個正整數,求比這個數大且最小的「不重複數」,「不重複數」的含義是相鄰兩位不相同,例如1101是重複數,而1201是不重複數。(15分)python

二、長度爲N(N很大)的字符串,求這個字符串裏的最長迴文子串。(15分)算法

三、數軸上從左到右有n各點a[0], a[1], ……,a[n -1],給定一根長度爲L的繩子,求繩子最多能覆蓋其中的幾個點。(15分)ide

流程都是A介紹思路,B貼出代碼,代碼寫的也不是很漂亮,湊湊活活貼下ui

一:spa

A.獲取輸入base的位數,而後分爲兩種狀況,狀況1是在該位數下尋找所須要的最小不重複數,狀況2是在比該位數+1的位數下找最小不重複數3d

狀況2比較簡單,就是1010...的羅列,一直到知足位數要求,狀況1也就是從base+1開始挨個判斷。。。感受就這麼簡單,沒有想什麼高深的算法,code

若是理解錯了同志們輕拍。。blog

B.代碼ip

  1 #!/bin/env/python
  2 # -*- encoding:utf-8 -*-
  3 #Filename: 1.py
  4 
  5 import sys
  6 
  7 def Get_base_out(num, length):
  8     '''Get_base_out method'''
  9     for i in range(int(num)+1, 10**length):
 10         result = Judge(i, length)
 11         if result == True:
 12             return i
 13     return -1
 14 
 15 
 16 def Get_base1_out(num, length):
 17     '''Get_base1_out method'''
 18     no_repeated_num = str(1)
 19     for i in range(0,length):
 20         if i % 2 == 0:
 21             no_repeated_num += '0'
 22         else:
 23             no_repeated_num += '1'
 24     return no_repeated_num
 25 
 26 
 27 def Judge(suspect, length):
 28     ''' Judge method'''
 29     temp = str(suspect)
 30     for i in range(0,length-1):
 31         if temp[i] == temp[i+1]:
 32             return False
 33     return True
 34 
 35 
 36 if __name__ == "__main__":
 37     for line in sys.stdin:
 38         base = line.strip()
 39         length = len(base)
 40         court = Get_base_out(base, length)
 41         if court == -1:
 42             court = Get_base1_out(base, length)
 43         print court
View Code

二:字符串

A.既然找東西,確定都遍歷一遍嘍,那只有想辦法在一遍遍歷中就完成任務,計劃用兩個變量分別存儲迴文自串的位置和迴文字串的長度。從頭至尾遍歷

判斷下就完事。

B.代碼:

注:沒寫123321這種類型的迴文自串,方法同樣就得再敲點代碼

python有個好處,就是列表負向不會越界,HoHo~

  1 #!/bin/env/python
  2 # -*- encoding:utf-8 -*-
  3 #Filename: 2.py
  4 
  5 import sys
  6 
  7 def Find_point(base, index):
  8     '''Find point method'''
  9     rt_point = -1
 10     if base[index-1] == base[index+1]:
 11         rt_point = index
 12     return rt_point
 13 
 14 def Get_length(base, point, length):
 15     '''Get huiwen length'''
 16     rt_len = -1
 17     for i in range(1, (length+1)/2):
 18         if point - i >= 0 and point + i < length:
 19             if base[point-i] == base[point+i]:
 20                 rt_len = i
 21             else:
 22                 break
 23         else:
 24             break
 25     return rt_len
 26 
 27 
 28 def Get_huiwen(init_in):
 29     '''Get huiwen'''
 30     base = str(init_in)
 31     length = len(base)
 32     huiwen_point = -1
 33     huiwen_len = -1
 34     for i in range(0, length - 1):
 35         tmp_point = -1
 36         tmp_len = -1
 37         tmp_point = Find_point(base, i)
 38         if tmp_point != -1:
 39             tmp_len = Get_length(base, tmp_point, length)
 40         if tmp_len > huiwen_len:
 41             huiwen_point = tmp_point
 42             huiwen_len = tmp_len
 43     if huiwen_point == -1 and huiwen_len == -1:
 44         return "None"
 45     start = huiwen_point - huiwen_len
 46     end = huiwen_point + huiwen_len + 1
 47     return base[start:end]
 48 
 49 if __name__ == "__main__":
 50     for line in sys.stdin:
 51         arg = line.strip()
 52         rt_value = Get_huiwen(arg)
 53         print "base:\n%s\nhuiwen:\n%s" % (arg, rt_value)
View Code

 

 肚子咕咕叫了,下次補第三題。。。

相關文章
相關標籤/搜索