#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"))