在英文的輸入中,我們經常會遇到大小寫切換的問題,頻繁切換大小寫會增加我們的按鍵次數,也會降低我們的打字效率。 眾所周知,切換大小寫有兩種方式,一種是按下"caps locks",也就是大寫鎖定鍵,這樣一來,之後的輸入模式都會被切換。另一種是同時按下shift和需要列印的字母,可以臨時切換大小寫(算作按下兩個鍵)。
已知初始狀態下,打字模式是小寫,現在給出需要列印的字串(區分大小寫),請你計算出最少需按鍵多少次才能列印出來。
輸入:
輸入第一行僅包含乙個正整數n,表示字串的長度(1<=n<=1000000)
輸入第二行包含乙個長度為n的字串,僅包含大小寫字母
輸出:
輸出僅包含乙個正整數,即最少的按鍵次數。
樣例輸入:
6aaaaaa
樣例輸出:
8解題思路:
這是一道值得思考的題
如果當前是小寫模式,並且當前字母是小寫,那麼直接加一,這樣最省事。
如果當前是小寫模式,而當前字母是大寫,這樣就有兩種選擇了。1, 按下caps lock鍵,切換到大寫模式,2, 同時按下shift鍵和當前字母。 那麼哪種模式好呢?這就需要看一看它的下乙個字元,如果仍然為大寫,那麼當然按下caps lock更好,並切換成當前為大寫模式;如果為小寫,那麼按下shift最好。
省略省略
3, 4 和1,2 步驟相反,是大寫模式下的情況。
注意點
大寫和小寫總共兩種狀態,我們可以用0表示小寫,1表示大寫。
對最後乙個字元進行處理,if i == len(s)-1: …,這樣只要沒到最後乙個字元,就可以在後面通過判斷i 和 i+1來處理。
n =
int(
input()
)s =
input()
temp =
for i in s:
ifstr
(i).islower():
'0')
ifstr
(i).isupper():
'1')
count =
0ind =
0for i in
range
(len
(temp)):
if ind ==0:
# 處理最後乙個字元
if i ==
len(temp)-1
:if temp[i]
=='0'
: count +=
1break
if temp[i]
=='1'
: count +=
2break
if temp[i]
=='0'
: count +=
1continue
if(temp[i]
=='1'
)and
(temp[i +1]
=='0'):
count +=
2continue
if(temp[i]
=='1'
)and
(temp[i +1]
=='1'):
count +=
2 ind =
1continue
if ind ==1:
if i ==
len(temp)-1
:if temp[i]
=='0'
: count +=
2break
if temp[i]
=='1'
: count +=
1break
if temp[i]
=='1'
: count +=
1continue
if(temp[i]
=='0'
)and
(temp[i +1]
=='1'):
count +=
2continue
if(temp[i]
=='0'
)and
(temp[i +1]
=='0'):
count +=
2 ind =
0continue
print
(count)
京東校招 最優打字策略
題目要求 輸入乙個字串,有大寫有小寫,可以按大寫字母鎖定,也可以按shift,最後要求計算最少按鍵次數可以把這個字串列印出來。1.遍歷字串,判斷連續2個輸入的狀態 2.只在本次輸入為大寫且未鎖定狀態下按鍵次數times 如果下乙個輸入為大寫,就讓本次按鍵為lock,修改lock標記為true,如果下...
年終將 京東,微策略筆試題
小東所在公司要發年終獎,而小東恰好獲得了最高福利,他要在公司年會上參與乙個 遊戲,遊戲在乙個6 6的棋盤上進行,上面放著36個價值不等的禮物,每個小的棋盤上面放置著乙個禮物,他需要從左上角開始遊戲,每次只能向下或者向右移動一步,到達右下角停止,一路上的格仔裡的禮物小東都能拿到,請設計乙個演算法使小東...
京東筆試題
剛才看到一篇京東筆試題,又見無聊題,俗稱智力題,下面我們就看看。1.說一架飛機可以飛50公尺,但是現在需要其飛100公尺,飛機之間可以互相加油。問是要飛完一共需要派出幾架飛機 首先飛機快飛到25公尺處時派出一架飛機從起點起飛,同時到達25公尺處,加完油後可以可以飛到75公尺,快到75公尺時從終點派出...