[编程 | 200分] 九宫格按键输入法

【题目】

    [编程 | 200分] 九宫格按键输入法

 

【代码】

复制代码
keyboard = {
    1:',.',
    2:'abc',
    3:'def',
    4:'ghi',
    5:'jkl',
    6:'mno',
    7:'pqrs',
    8:'tuv',
    9:'wxyz',
    0:' '
}

def fun(s):
    result = []
    mode = 1                            # 1:数字  0:字母
    tmpL = list(s)
    stack = []

    def out(mode):
        nonlocal stack
        if mode:
            while stack:
                result.append(stack.pop(0))
        else:
            lenStack = len(stack)
            lenMap = len(keyboard[int(stack[-1])])
            result.append(keyboard[int(stack[-1])][(lenStack % lenMap) - 1])
            stack = []

    while tmpL or stack:
        if not tmpL:        # 只有stack非空
            out(mode)
        else:               # 只有tmpL非空、tmpL和stack均非空
            if tmpL[0] == '#':
                out(mode)
                tmpL.pop(0)
                mode = 0
            elif tmpL[0] == '/':
                out(mode)
                tmpL.pop(0)
            else:
                if not stack or tmpL[0] == stack[-1]:        # 多次相同的输入需要入栈
                    stack.append(tmpL.pop(0))
                else:                           # 输入不同则需要出栈计算之前输入的内容
                    out(mode)

    return ''.join(result)


if __name__ == '__main__':
    test = '#44882933444'
    print(fun(test))
复制代码

 

posted on   呼延灼  阅读(644)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?

导航

统计

点击右上角即可分享
微信分享提示