2020-1-16(86)

#255、字符串a = “not 404 found 张三 99 深圳”,请取出所有中文部分

#方法一
import string
a = "not 404 found 张三 99 深圳"
result=[]
for i in a:
    if i not in (string.ascii_letters+string.digits+string.punctuation+" "):
        result.append(i)

print("".join(result))

#方法二
import re
result = []
l = a.split()
str_list = re.findall(r"\b[a-zA-Z]+\b",a)
for value in l:
    if value not in str_list  and not value.isdigit():
        result.append(value)
print(result)

#256、给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

nums = [2, 7, 11, 15]
target = 9

def find_num(nums,target):
    for i in range(len(nums)):
        for j in range(i+1,len(nums)):
            if nums[i]+nums[j]==target:
                print(nums[i],nums[j])

find_num(nums,target)               

#257、给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
#请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。

def find_mid_num(nums1,nums2):
    num_list=sorted(nums1+nums2)
    if len(num_list)%2 == 1:
        return num_list[len(num_list)//2]
    else:
        return (num_list[len(num_list)//2-1]+num_list[len(num_list)//2])/2

print(find_mid_num([1,2,3],[4,5]))
print(find_mid_num([1,2,3],[4,5,6]))

#258、给定一个字符串,找出不含有重复字符的最长子串的长度。

s1 = "abcdabc"
s2="pwwkew"
def find_max_len_sub_s(s):
    sub_s_list=[] #所有子串
    for i in range(len(s)):
        for j in range(len(s)-i):
            sub_s_list.append(s[i:i+j+1])
    print(sub_s_list)

    diff_sub_s_list=[] #不含有重复字符的子串
    for sub in sub_s_list:
        if len(list(sub))==len(set(sub)):
            diff_sub_s_list.append(sub)
    print(diff_sub_s_list)

    print("最长子串的长度是:",len(sorted(diff_sub_s_list,key=len)[-1]))

find_max_len_sub_s(s1)
find_max_len_sub_s(s2)

#259、给定一个 32 位有符号整数,将整数中的数字进行反转。
#假设我们的环境只能存储 32 位有符号整数,其数值范围是 [(−2)^31, 2^31 − 1]。
#根据这个假设,如果反转后的整数溢出,则返回 0。

def num_reverse(num):
    if num==0:
        return num
        
    elif num>0:
        reverse_num=int(str(num)[::-1])
        if reverse_num<=pow(2,31)-1 and reverse_num>=pow(-2,31):
            return reverse_num
        else:
            return 0
            
    elif num<0:
        reverse_num=int(str(num)[0]+str(abs(num))[::-1])    
        if reverse_num<=pow(2,31)-1 and reverse_num>=pow(-2,31):
            return reverse_num
        else:
            return 0

print(num_reverse(123))
print(num_reverse(-123))
print(num_reverse(120))

#260、实现 atoi,将字符串转为整数。

import re
def string_to_int(s):
    num=re.search(r"\d+|-\d+",s).group()
    #print(num)
    if int(num)==0:
        return int(num)
        
    elif int(num)>0:
        if int(num)>pow(2,31)-1:
            return pow(2,31)-1 
        else:
            return int(num)
            
    elif int(num)<0:
        if int(num)<pow(-2,31):
            return pow(-2,31)
        else:
            return int(num)
    
print(string_to_int("42"))
print(string_to_int("-42"))
print(string_to_int("4193 with words"))
print(string_to_int("words and 987"))
print(string_to_int("-91283472332"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值