lecode-001


数据和模型 https://blog.csdn.net/u010986753/article/details/98526886

1、两数之和

  给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

#方法一
def two_sum(nums, target):
    """这样写更直观,遍历列表同时查字典"""
    dct = {}
    for i, n in enumerate(nums):
        if target - n in dct:
            return [dct[target - n], i]
        dct[n] = i
#方法二
def twoSum(nums, target):
    hashmap={}
    for i,num in enumerate(nums):
        if hashmap.get(target - num) is not None:
            return [i,hashmap.get(target - num)]
        hashmap[num] = i #这句不能放在if语句之前,解决list中有重复值或target-num=num的情况

2、非重复字符串长度

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

# 无重复字符的最长子串
def lengthOfLongestSubstring( s):
        """
        :type s: str
        :rtype: int
        """
        # 存储历史循环中最长的子串长度
        max_len = 0
        # 判断传入的字符串是否为空
        if s is None or len(s) == 0:
            return max_len
        # 定义一个字典,存储不重复的字符和字符所在的下标
        str_dict = {}
        # 存储每次循环中最长的子串长度
        one_max = 0
        # 记录最近重复字符所在的位置+1
        start = 0
        for i in range(len(s)):
            # 判断当前字符是否在字典中和当前字符的下标是否大于等于最近重复字符的所在位置
            if s[i] in str_dict and str_dict[s[i]] >= start:
                # 记录当前字符的值+1
                start = str_dict[s[i]] + 1
            # 在此次循环中,最大的不重复子串的长度
            one_max = i - start + 1
            # 把当前位置覆盖字典中的位置
            str_dict[s[i]] = i
            # 比较此次循环的最大不重复子串长度和历史循环最大不重复子串长度
            max_len = max(max_len, one_max)
        return max_len

print(lengthOfLongestSubstring("bbbbb"))
print(lengthOfLongestSubstring("eeydgwdykpv"))
print(lengthOfLongestSubstring("pwwkew"))
print(lengthOfLongestSubstring("abcabcbb"))

3、验证IP地址

  编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。

  IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(".")分割。比如,172.16.254.1;

  同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。

  IPv6 地址由8组16进制的数字来表示,每组表示 16 比特。这些组数字通过 (":")分割。比如, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有效的地址。而且,我们可以加入一些以 0 开头的数字,字母可以使用大写,也可以是小写。所以, 2001:db8:85a3:0:0:8A2E:0370:7334 也是一个有效的 IPv6 address地址 (即,忽略 0 开头,忽略大小写)。

def validIPAddress(IP):
        p=IP.split('.')
        if len(p)==4:
            for i in range(4):
                m=len(p[i])
                if m>3 or m==0:
                    return 'Neither'        #位数不对
                if m>1:     
                    if not('1'<=p[i][0]<='9'):
                        return 'Neither'        #首位有其他值
                for j in range(m):
                    if not('0'<=p[i][j]<='9'):
                        return 'Neither'        #有非数字
                if int(p[i])>255:
                    return 'Neither'    #大于255
            return 'IPv4'

        p=IP.split(':')
        if len(p)==8:
            for i in range(8):
                m=len(p[i])
                if m>4 or m==0:
                    return 'Neither'        #位数不对
                for j in range(m):
                    if not('0'<=p[i][j]<='9' or 'a'<=p[i][j]<='f' or 'A'<=p[i][j]<='F'):
                        return 'Neither'        #有非数字
            return 'IPv6'

        return 'Neither'

4、缺失数字

  给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。

def missingNumber(nums):
    # 对数组进行排序
    nums.sort()
    # 让数组的值跟索引一一匹配, 不匹配上则为缺失的数字
    for i in range(len(nums)):
        if nums[i] != i:
            return i
    # 如果全部都不匹配, 则说明缺失的数字为最后一个值
    return len(nums)

5、翻转字符串里的单词

  给定一个字符串,逐个翻转字符串中的每个单词。

def reverseWords(s):
    s = [i for i in s.strip().split(' ') if i.strip()]
    #strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
    return ' '.join(list(reversed(s)))

print(reverseWords("    xxt    lhr    "))
print(reverseWords("the sky is blue"))
print(reverseWords("  hello world!  "))
print(reverseWords("a good   example"))


#方法二
s = "a good   example"
print(s[::-1])
'''
【干货来了|小麦苗IT资料分享】
★小麦苗DB职场干货:https://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w
★小麦苗数据库健康检查:https://share.weiyun.com/5lb2U2M
★小麦苗微店:https://weidian.com/s/793741433?wfr=c&ifr=shopdetail
★各种操作系统下的数据库安装文件(Linux、Windows、AIX等):链接:https://pan.baidu.com/s/19yJdUQhGz2hTgozb9ATdAw  提取码:4xpv
★小麦苗分享的资料:https://share.weiyun.com/57HUxNi
★小麦苗课堂资料:https://share.weiyun.com/5fAdN5m
★小麦苗课堂试听资料:https://share.weiyun.com/5HnQEuL
★小麦苗出版的相关书籍:https://share.weiyun.com/5sQBQpY
★小麦苗博客文章:https://share.weiyun.com/5ufi4Dx
★数据库系列(Oracle、MySQL、NoSQL):https://share.weiyun.com/5n1u8gv
★公开课录像文件:https://share.weiyun.com/5yd7ukG
★其它常用软件分享:https://share.weiyun.com/53BlaHX
★其它IT资料(OS、网络、存储等):https://share.weiyun.com/5Mn6ESi
★Python资料:https://share.weiyun.com/5iuQ2Fn
★已安装配置好的虚拟机:https://share.weiyun.com/5E8pxvT
★小麦苗腾讯课堂:https://lhr.ke.qq.com/
★小麦苗博客:http://blog.itpub.net/26736162/
'''

'''
  有问题请在博客下留言或加作者:
  微信:tinghai87605025 联系我加微信群
  QQ :87605025
  QQ交流群:py_data 483766429
  公众号:DB宝
  '''

有趣的事,Python永远不会缺席

欢迎关注小婷儿的博客

  文章内容来源于小婷儿的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解!!!

   小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。重要的事多说几遍。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值