WHCSRL 技术网

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
推荐阅读