網易2017 [編程題] 調整隊形

在幼兒園有n個小朋友排列爲一個隊伍,從左到右一個挨着一個編號爲(0~n-1)。其中有一些是男生,有一些是女生,男生用'B'表示,女生用'G'表示。小朋友們都很頑皮,當一個男生挨着的是女生的時候就會發生矛盾。作爲幼兒園的老師,你需要讓男生挨着女生或者女生挨着男生的情況最少。你只能在原隊形上進行調整,每次調整隻能讓相鄰的兩個小朋友交換位置,現在需要儘快完成隊伍調整,你需要計算出最少需要調整多少次可以讓上述情況最少。例如:
GGBBG -> GGBGB -> GGGBB
這樣就使之前的兩處男女相鄰變爲一處相鄰,需要調整隊形2次 

輸入描述:
輸入數據包括一個長度爲n且只包含G和B的字符串.n不超過50.


輸出描述:
輸出一個整數,表示最少需要的調整隊伍的次數

輸入例子:
GGBBG

輸出例子:
2
def read_data():
    s = raw_input()
    return s

def caculate_count(s):
    s_length = len(s)
    boycount, girlcount, boytotal, girltotal = 0, 0, 0, 0    
    for i in range(s_length):
        if s[i]=='B':
            boycount +=1
            boytotal +=i
        else:
            girlcount +=1
            girltotal +=i
    boytotal -= (boycount-1)*boycount/2;
    girltotal -=(girlcount-1)*girlcount/2
    return boytotal if boytotal<girltotal else girltotal
        
s = read_data()
print caculate_count(s)
        

備註:考慮最初狀態和最終狀態,不用考慮中間過程。兩兩交換,也就是計算起始點和目標點次數。

參考:http://www.cnblogs.com/zhangcaiwang/p/6667811.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章