总感觉不熟悉python,现在拿LeetCode去练手,练习python和算法思想,小白暴力手段
3.无重复字符的最长子串
题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
class solution
def length(self,s:str) -> int:
max=0
for i in range(len(s)):
c=[]
c.append(s[i])
for j in range(i+1,len(s)):
if s[j] not in c:
c.append(s[j])
else:
break
if(max<len(c)):
max=len(c)
return max
4.给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
a=0.0
new = []
##先排序,构造出新的有序[],若len是奇数就取len()//2+1,是偶数就取len()/2和len()/2+1
##有序列表排序
i=0
j=0
while i<len(nums1) and j<len(nums2):
if nums1[i]<nums2[j] :
new.append(nums1[i])
i=i+1
elif nums1[i]>=nums2[j]:
new.append(nums2[j])
j=j+1
while i<len(nums1):
new.append(nums1[i])
i=i+1
while j<len(nums2):
new.append(nums2[j])
j=j+1
length=len(new)
if length%2==0:
a=int(length/2)
print(a)
return (new[a]+new[a-1])/2.0
if length%2==1:
a=length//2
print(2)
return new[a]
5.给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
暂时写不出来
朋友给的解答马拉车原理
这是将时间和空间都弄成了o(n)
看了一下还是没想继续做这个鬼畜题目
6.将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:
L C I R
E T O E S I I G
E D H N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”.
其实这个就是有方向先向下再向上在python中用到二维数组,但是只知道多少行不知道列数,初始化就是[]
class Solution:
def convert(self, s: str, numRows: int) -> str:
if(numRows==1):return s##就一行
a = [[]for i in range(numRows)]##初始化a
r=0 ##表示a的下标
dict=1##表示方向向下为1向上为-1
for c in a:
if r==0 :
dict ==1
if r>=numRows-1:
dict ==-1
a[r].append(c)
r+=dict
aa=""
for i in a:
for j in i:
aa+=j
return aa
请你来实现一个 atoi 函数,使其能将字符串转换成整数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0。
说明:
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,qing返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
def myAtoi(self, str: str) -> int:
##for循环查看第一个是数字的,然后截取到不是数字的
a = ['-','+']
b = ['0','1','2','3','4','5','6','7','8','9']
num=''
flag=1 ##开关去判断是否截止循环,如果下一个不是数字截止循环开关关上
str = str.lstrip()##去空格
if len(str)==0 :
return 0
if str[0] not in a and str[0] not in b:##直接pass
return 0
elif str[0]=='-':
flag=-1
str=str[1:]
elif str[0]=='+':
str=str[1:]
if len(str)==0:
return 0
elif str[0] not in b:
return 0
for i in str:
if i in b:
num+=i
else:
break
res=int(num)*flag
if res>=-(2**31) and res<=(2**31-1):
return res
elif res<-(2**31):
return -(2**31)
elif res>(2**31-1):
return 2**31-1