首页 > 编程语言 >Python 1-24 练习五 综合练习

Python 1-24 练习五 综合练习

时间:2023-05-22 11:03:34浏览次数:32  
标签:24 digits return Python 练习 assert substr __ def


1、无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

# substr 向右扩展一个元素,如果该元素已经在 substr 中,则需要将其及其前面的元素去掉。
    # 可通过 substr.index(c) 定位元素 或 substr.split(c)[1]分割成子串
    #  发现有重复字符时,可以直接把左指针移动到第一个重复字符的下一个位置即可。
def lengthOfLongestSubstring(s: str) -> int:
    # substr = ''
    # maxlen = start = 0
    # for i, c in enumerate(s):
    #     if c in substr: start += substr.index(c) + 1
    #     substr = s[start:i + 1]
    #     maxlen = max(i + 1 - start, maxlen)

    substr = ''
    maxlen = 0
    for c in s:
        if c in substr: substr = substr.split(c)[1]      
        substr += c
        maxlen = max(len(substr), maxlen)

    return maxlen
    
if __name__ == '__main__':
    assert lengthOfLongestSubstring("abcabcbb") == 3
    assert lengthOfLongestSubstring("pwwkewa") == 4
    assert lengthOfLongestSubstring("bbbbb") == 1
    assert lengthOfLongestSubstring("abba") == 2
    assert lengthOfLongestSubstring("tmmzuxt") == 5
    assert lengthOfLongestSubstring("") == 0

2、有效的括号

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

def isValid(s):
    if not s:return True
    # lenth = len(s)
    # if lenth%2:return False    
    brackets={'(':')','{':'}','[':']'}
    # for i in brackets:  
    #     if s.count(i)!=s.count(brackets[i]):return False
    x=[]
    for i in s:
        if i in brackets: x.append(i)
        else:  
            if x and i == brackets[x[-1]]:x.pop()
            else:return False
    else:
        return not x  # False if x else True 

if __name__ == '__main__':
    assert isValid("()") == True
    assert isValid("()[]{}") == True
    assert isValid("(]") == False
    assert isValid("([)]") == False
    assert isValid("{[]}") == True

3、电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

Python 1-24 练习五 综合练习_python

# 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
from typing import List

# 字典快点
# numchar=['abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']
n = {'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}

def letterCombinations(digits: str) -> List[str]:
    if not digits: return []

    # 定义函数 backtrack(combination, nextdigit),
    # 当 nextdigit 非空时,对于 nextdigit[0] 中的每一个字母 letter,
    # 执行回溯 backtrack(combination + letter,nextdigit[1:],
    # 直至 nextdigit 为空。最后将 combination 加入到结果中。

    def backtrack(conbination, nextdigit):
        if nextdigit:
            for letter in n[nextdigit[0]]:
            # for letter in n[int(nextdigit[0])-2]:
                backtrack(conbination + letter, nextdigit[1:])

        else:
            res.append(conbination)

    res = []
    backtrack('', digits)
    return res

    # 我们也可以使用队列,先将输入的 digits 中第一个数字对应的每一个字母入队,
    # 然后将出队的元素与第二个数字对应的每一个字母组合后入队...
    # 直到遍历到 digits 的结尾。最后队列中的元素就是所求结果。

def letterCombinations1(digits: str) -> List[str]:
    if not digits: return []    
    queue = ['']  # 初始化队列
    for digit in digits:  
        for _ in range(len(queue)):
            tmp = queue.pop(0)  
            # 这里我们不使用 int() 转换字符串,使用ASCII码
            # for letter in n[ord(digit) - 50]: 
            for letter in n[digit]:
                queue.append(tmp + letter)                 
    return queue

def df(digits):
    if not digits:return []
    def x(res,d):    
        return x([i+j for i in res for j in n[d[0]]],d[1:]) if d else res    
    
    return x([''],digits)


def f(digits):
    if not digits:return []
    def func(r,d):
        return func([i+j for i in r for j in d[0]],d[1:]) if d else r
    
    return func([''],[n[x] for x in digits]) 


if __name__ == '__main__':
    assert letterCombinations('23') == ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]
    assert letterCombinations('') == []
    assert letterCombinations('2') == ["a", "b", "c"]
    
    assert df('23') == ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]
    assert df('') == []
    assert df('2') == ["a", "b", "c"]

    assert f('23') == ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]
    assert f('') == []
    assert f('2') == ["a", "b", "c"]


标签:24,digits,return,Python,练习,assert,substr,__,def
From: https://blog.51cto.com/u_1439909/6321635

相关文章

  • Python 2-05 高阶函数
    一、函数式编程函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。而函数式编程(请注意多了一个“式”字)——FunctionalProgrammi......
  • Python 3-11 异常处理
    异常处理一、错误和异常1、句法错误句法错误又称解析错误:>>>whileTrueprint('Helloworld')File"<stdin>",line1whileTrueprint('Helloworld')^SyntaxError:invalidsyntax解析器会复现出现句法错误的代码行,并用小“箭头”指向行里检测到的第一......
  • Python 05 Selenium 等待
    等待WebDriver通常可以说有一个阻塞API。因为它是一个指示浏览器做什么的进程外库,而且web平台本质上是异步的,所以WebDriver不跟踪DOM的实时活动状态。大多数由于使用Selenium和WebDriver而产生的间歇性问题都与浏览器和用户指令之间的竞争条件有关。例如,用户指示浏览......
  • Python 1-11 练习一
    Python1-11练习一一、已知字符串s=“aAsmr3idd4bgs7Dlsf9eAF”,要求如下1、请将s字符串的大写改为小写,小写改为大写。#使用字符串的内置方法a.swapcase():s='aAsmr3idd4bgs7Dlsf9eAF't=s.swapcase()print(t)2、请将s字符串的数字取出,并输出成一个新的字符串。s=......
  • Python 1-10 字符串操作
    Python1-10字符串操作1、字符串拼接>>>s='hello'*2>>>s='hello'+'world'>>>s='hello''world'>>>......
  • Python 02 Xpath
    XpathXpath(XMLPathLanguage)是在XML文档中选择节点的语言一、XPath路径表达式1、XPath节点在XPath中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML文档是被作为节点树来对待的,树的根被称为文档节点或者根节点。2、XPath节点关系父(Pa......
  • Python 1-09 字符串
    Python1-09字符串一、Python字符串在Python3中,字符串是由Unicode码点组成的不可变序列。x="Python"y=x+"Cat"xisy#False字符串是用单引号"或双引号""括起来的一串字符,使用三引号创建多行字符串。在Python中单字符也是用字符串表示。>>>var1='HelloWor......
  • python随机爬取五个电影演员一生生涯中出演的电影名称
    为了随机爬取电影演员的电影,需要使用Python中的网络爬虫技术和相关的第三方库,如requests和BeautifulSoup。以下是一个简单的示例程序:importrandomimportrequestsfrombs4importBeautifulSoup#输入要爬取的演员的姓名actor_name=input('请输入要爬取的演员的姓名:')#......
  • 5-19|记录Python调用salt代码
    #放大一importsalt.clientlocal=salt.client.LocalClient()res=local.cmd(f'{minion_id}','test.ping',timeout=10)#方法二importsalt.configimportsalt.loader__opts__=salt.config.minion_config('/etc/salt/minion')__grains__......
  • Python 什么是数组?
    在Python中,数组通常是指用于表示具有相同数据类型的多个元素的数据结构。在Python中,数组可以表示为列表或NumPy数组。列表:Python中最常用的数组表示法是“列表”。一个列表是由一系列有序元素的集合组成,每个元素可以是字符串、数字、布尔值和其他任何类型的对象。例如: ......