最優打字策略 京東筆試

2021-09-26 11:07:06 字數 2317 閱讀 7396

在英文的輸入中,我們經常會遇到大小寫切換的問題,頻繁切換大小寫會增加我們的按鍵次數,也會降低我們的打字效率。 眾所周知,切換大小寫有兩種方式,一種是按下"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公尺時從終點派出...