python 解答科大訊飛-爭吵程式設計題
阿新 • • 發佈:2018-12-09
程式設計題目如下(原文:https://blog.csdn.net/Mr_Police/article/details/84780774 ):
時間限制:C/C++語言2000MS;其他語言4000MS
記憶體限制:C/C++語言65536KB;其他語言589824KB
題目描述:
有n 個人排成了一行佇列,每個人都有一個站立的方向:面向左或面向右。由於這n 個人中每個人都很討厭其他的人,所以當兩個人面對面站立時,他們會發生爭吵,然後其中一個人就會被踢出佇列,誰被踢出佇列都是有可能的。
我們用字元L 來表示一個面向左站立的人,用字元R 來表示一個面向右站立的人,那麼這個佇列可以用一個字串描述。比如RLLR 就表示一個四個人的佇列,其中第一個人和第二個人是面對面站立的。他們發生爭吵後佇列可能會變成LLR,也可能變成RLR;若變成RLR,則第一個人與第二個人還會發生爭吵,佇列會進一步變成LR 或者RR。
若在某個時刻同時可能有很多的爭吵會發生時,接下來只會發生其中的一個,且任意一個都是有可能發生的。
你想知道經過一系列的爭吵後,這個佇列最少會剩下多少人?
輸入
第一行包含一個有字元L 和R 構成的字串。
1 ≤字串長度≤ 105
輸出
輸出佇列中最少會剩下多少人。
樣例輸入
LRRLRL
樣例輸出
2
Hint
一種可能的變化情況是這樣的:
LRRLRL -> LRLRL -> LRRL -> LRL -> LR
python2的解法為:
# 從視窗輸入字串 string = raw_input() # 每次讓字串長度減少1,如果長度沒減少,將返回None def shorten(string): for i in range(len(string)-1): if string[i] == 'R' and string[i+1] == 'L': if i == 0: return 'R' + string[2:] break elif string[i-1] == 'R': return string[0:i] + 'L' + string[i+2:] break else: return string[0:i] + 'R' + string[i+2:] break # 如果輸入的字串長度為1,則結果為1 num = len(string) if num == 1: print 1 # 長度大於等於2時,逐次判斷,直到長度不在減少 while num > 1: stringS = shorten(string) if stringS == None: print num break else: numS = len(stringS) if numS == num: print num break else: num = numS string = stringS