【刷题记录】【python】小题目2

# coding=utf-8
# 冒泡排序
def bubble_sort(arr):
	for i in range(len(arr)-1):
		for j in range(len(arr)-1-i):
			if arr[j]>arr[j+1]:
				arr[j],arr[j+1]=arr[j+1],arr[j]
	return arr

if __name__=="__main__":
	a=[5,4,6,3,1,2,8,9,7]
	print(bubble_sort(a))

# coding = utf-8
# 插入排序
def insert_sort(arr):
	for i in range(len(arr)-1): # 比较n-1次
		for j in range(i+1,0,-1): #逆序循环
			if arr[j]<arr[j-1]:
				arr[j-1],a[j]=a[j],a[j-1]
			else:
				break # 前面的为有序序列,当后面的值大于前面的第一个值,那就一定大于前面所有值。
	return arr	
if __name__=="__main__":
	a=[5,4,6,3,1,2,8,9,7]
	print(insert_sort(a))
'''
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度
'''
# coding = utf-8
def child_str(str):
	tmp=''
	length=0
	for i in str:		
		if i not in tmp:
			tmp+=i
			length=max(length,len(tmp))
		else:
			tmp+=i
			tmp=tmp[tmp.index(i)+1:] # 当前字符在tmp中重复,去掉第一个重复的字符,更新字符串
	print(tmp)
	return length

if __name__=="__main__":
	a="abcabcqwertyuiop"
	print(child_str(a))
# conding=utf-8
'''
求两个字符串的最长公共子串
思想:建立一个二维数组,保存连续位是否相同
'''
def sub_str(str1,str2):
	lstr1=len(str1)
	lstr2=len(str2)
	record=[[0 for j in range(lstr2+1) ] for i in range(lstr1+1)]
	
	max_num   = 0 # 相同子串的最长长度 
	end_index = 0 # 最长子串的终止位置
	
	for i in range(lstr1):
		for j in range(lstr2):
			if str1[i] == str2[j]: # 相同就累加
				record[i+1][j+1] = record[i][j] + 1
				if record[i+1][j+1] > max_num:
					max_num = record[i+1][j+1] # 更新最长长度
					end_index = i + 1 # 更新最长子串的终止位置
	print(record)
	return str1[end_index-max_num:end_index],max_num # 返回最长公共子串及其长度
if __name__=="__main__":
	str1="mabc"
	str2="abcn"
	print(sub_str(str1,str2))

输出:
[[0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0], 
 [0, 1, 0, 0, 0], 
 [0, 0, 2, 0, 0], 
 [0, 0, 0, 3, 0]]

('abc', 3)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值