链表两数和
这道题重点在于判断条件的设定。
思路:这题的数据是逆序的所以链表的第一个数是个位,第二个数是十位,以次类推,还要考虑进位,所以其实这是一个3个数的相加。
class ListNode:
def __init__(self,val = 0,next = None):
self.val = val
self.next = next
class Solution:
def addTwoNumbers(self,l1:ListNode,l2:ListNode)->ListNode:
flag = 0 #标志进位
p = ListNode() #用于记录链表头记录开始的位置
result = ListNode()
p.next = result
while True:
if((l1!=None) & (l2!=None)):
if((l1.val + l2.val + flag) <= 9):
result.val = l1.val+l2.val + flag
flag = 0
else:
result.val = l1.val + l2.val - 10 + flag
flag =1
elif(l1!=None):
if ((l1.val + flag) <= 9):
result.val = l1.val + flag
flag = 0
else:
result.val = l1.val- 10 + flag
flag = 1
elif (l2 != None):
if ((l2.val + flag) <= 9):
result.val = l2.val + flag
flag = 0
else:
result.val = l2.val - 10 + flag
flag = 1
elif(flag == 1):
result.val = 1
flag = 0
else:
break;
if(l1!=None):
l1 = l1.next
if(l2!=None):
l2 = l2.next
if ((l1 != None) | (l2 != None) | (flag != 0)):
q = ListNode()
result.next = q
result = q
return p.next
a = ListNode()
b = ListNode()
c = ListNode()
d = ListNode()
e = ListNode()
f = ListNode()
g = ListNode()
a.val = 9
a.next = b
b.val = 8
d = ListNode()
e = ListNode()
f = ListNode()
g = ListNode()
d.val = 1
a = Solution().addTwoNumbers(a,d)
print(a)
字典法求解无重复子串
问题描述:一个字符串,找到最长的无重复子串
思路:以字符串中的每一个字符为子串的串首,在当前子串中搜索所要加入子串中的字符查看是否已经存在,若已经存在则无重复子串已经找到。以次遍历每一个子串。该处用字典法,为了熟悉python中的字典用法。
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
if(s==""):
return 0
length = len(s)
maxNoRe = 0
maxStart = 0
List = []
for i in range(0,length):
dictionary = dict()
NoRe = 0
j = i
while(j<length):
if(s[j] not in dictionary):
dictionary[s[j]] = 1
NoRe +=1
j+=1
else:
break
if(NoRe > maxNoRe):
maxNoRe = NoRe
maxStart = i
#return s[maxStart:maxStart+maxNoRe]
return maxNoRe
s = ""
result = Solution().lengthOfLongestSubstring(s)
print(result)