这是一道京东校招的笔试题目,有两种实现方式,最好的实现方式是通过贪心算法,本篇还未通过贪心算法实现,后续会继续实现。
- 题目描述
- 思路
- 代码
题目描述
在英文的输入中,我们经常会遇到大小写切换的问题,频繁切换大小写会增加我们的按键次数,也会降低我们的打字效率。 众所周知,切换大小写有两种方式:
- 一种是按下”caps locks”,也就是大写锁定键,这样一来,之后的输入模式都会被切换。
- 另一种是同时按下shift和需要打印的字母,可以临时切换大小写(算作按下两个键)。
已知初始状态下,打字模式是小写,现在给出需要打印的字符串(区分大小写),请你计算出最少需按键多少次才能打印出来。
输入:
输入第一行仅包含一个正整数n,表示字符串的长度(1<=n<=1000000)
输入第二行包含一个长度为n的字符串,仅包含大小写字母
输出:
输出仅包含一个正整数,即最少的按键次数。
样例输入:
6
AaAAAA
样例输出:
8
思路
这是一道值得思考的题
- 如果当前是小写模式,并且当前字母是小写,那么直接加一,这样最省事。
- 如果当前是小写模式,而当前字母是大写,这样就有两种选择了。
- 按下caps lock键,切换到大写模式
- 同时按下shift键和当前字母。
那么哪种模式好呢?
这就需要看一看它的下一个字符,如果仍然为大写,那么当然按下caps lock更好,并切换成当前为大写模式;
如果为小写,那么按下shift最好。大写反之
注意点
- 大写和小写总共两种状态,我们可以用0表示小写,1表示大写。
- 对最后一个字符进行处理,if i == len(s)-1: …,这样只要没到最后一个字符,就可以在后面通过判断i 和 i+1来处理。
代码
简单逻辑做法
javascript
1 | function isUpper (code) { // 判断字母是否为大写 |