京东2019秋招前端Web笔试编程题第一题

我数据结构和算法很垃圾,本以为一道都做不出来,结果还是通过自己的蠢方法做了出来

但是一开始的有点小问题,考试结束才想起不太对劲。。。
现在已经修改下小错误,因为已经没有错了,有错欢迎指出来!


题目如下:




Python3 代码如下:

代码看上去很多,其实有很多注释,而且其实思路很简单
代码丑陋,上面也说道,我的数据结构和算法很垃圾的,只是有个思路做出这道题,
不喜勿喷……

def min_press(string, length):
    if string.lower() == string:
        return length

    if string.upper() == string:
        return length + 1

    count = 0   # 所需的最小按键数
    flag = False  # 大小写模式标志位,默认一开始为小写(其中小写用False表示,大写用True表示)
    for i in range(length):
        # 特殊情况:到了最后一个元素之后是没有i+2的,会超出索引
        # 所以需要对倒数第二个开始做下特殊处理,这里就一次把最后2个所需按键总数算出来
        # 最后两个只有4种情况,aa(小小),aA(小大),Aa(大小),AA(大大)
        if i == length - 2:
            if not flag:
                # 当前为小写模式,且最后两个为aa(小小),才+2
                if string[i].islower() and string[i+1].islower():
                    count += 2
                # 剩下的3种情况都是+3,可以自行理解下
                else:
                    count += 3
            else:
                # 这里的分析也类似上面的
                if string[i].isupper() and string[i+1].isupper():
                    count += 2
                else:
                    count += 3
            return count

        # 以下为正常情况下
        # 如果当前为小写模式
        if not flag:
            # 考虑下首字符这种特殊情况
            if i == 0:
                i -= 1
            # 如果下一个字母还是小写,直接+1
            if string[i+1].islower():
                count += 1
            # 下一个是大写,再下一个是小写,那就临时切换
            elif string[i+1].isupper() and string[i+2].islower():
                count += 2
            # 下一个是大写,再下一个也是大写,那就永久切换
            elif string[i+1].isupper() and string[i+2].isupper():
                flag = True
                count += 2
        # 如果当前是大写模式
        else:
            # 下一个字母还是大写,直接+1
            if string[i+1].isupper():
                count += 1
            # 下一个是小写,再下一个是大写,那就只是临时切换
            elif string[i+1].islower() and string[i+2].isupper():
                count += 2
            # 下一个是小写,再下一个还是小写,那就永久切换
            elif string[i+1].islower() and string[i+2].islower():
                flag = False
                count += 2
    return count


while True:
    str_len = int(input().strip())
    string = input().strip()
    print(min_press(string, str_len))



#京东##秋招##笔试题目##前端工程师#
全部评论
你不用应聘前端了,python大厂需要你
点赞 回复 分享
发布于 2019-08-24 23:17
好了,你就是东哥的兄弟
点赞 回复 分享
发布于 2019-08-24 23:35

相关推荐

点赞 评论 收藏
分享
只写bug的程序媛:人家说一本以上,不是及以上
点赞 评论 收藏
分享
评论
1
7
分享

创作者周榜

更多
牛客网
牛客企业服务