Day3 学习记录
1.输出单向链表中倒数第K个结点
来源:牛客网
输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
正常返回倒数第k个结点指针,异常返回空指针
输入描述:
输入说明
1 输入链表结点个数
2 输入链表的值
3 输入k的值
输出描述:
输出一个整数
while True: #循环
try:
n = int(input) #输入链表结点个数,整型
l = list(map(int,input().split()))
#list()创建列表 map()会根据提供的函数对指定序列做映射 split()根据空格分开
s = int(input()) #输入K的值
if s==0:
print(0) #如果K的值等于0,则输出0
else:
print(l[-s]) #输出倒数第K个结点
except:
break
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
2.无重复字符的最长子串
来源:LeetCode
代码学习来自LeetCode题解中的Supine*
给定一个字符串s ,请你找出其中不含有重复字符的最长子串的长度。
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
ans = 0 #定义变量 无重复最长子串个数
hash_set = set() #创建集合
left,right = 0,0 #左指针和右指针初始都设为0
while right<len(s): #如果右指针小于字符串长度,则循环
#去除重复的字符,也就是当如果右指针值出现了重复(在集合中),需要去掉左指针指的值,然后右指针像右边移动一个位置
while s[right] in hash_set: #当右指针指的值在集合中的时候循环
hash_set.remove(s[left]) #集合中去掉左指针指的值
left+=1 #右指针向右移动
#当右指针值没有重复的时候,需要在集合中增加右指针的值
hash_set.add(s[right]) #集合中增加右指针的值
ans = max(ans,right-left+1) #找到最大值
return ans #返回最长子串个数
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
推荐阅读