- 博客(4)
- 收藏
- 关注
原创 KMP算法(python实现)
那么要找到str[0:i+1]的最长相等前后缀,现在就需要判断str[next[j-1]]和str[i+1]是否相等,如果相等,那么str[0:i+1]的最长前缀就是3+str[next[j-1]],最长后缀就是6+str[i+1]。此时需要判断str[j]和str[i+1]是否相等,如果相等,那么子串str[0:i+1]的最长前缀和最长后缀就可以在str[0:i]的最长前缀和最长后缀的基础上往后再加上一位,就有next[i+1]=j+1。后缀为ba、a,最长相等前后缀是a,所以next[2]=1;
2025-03-08 18:10:28
950
原创 LeetCode第六题:锯齿形转换(Python)
所以,我们只需要循环读取每个字符,并且在每一列的开始或结束的位置改变读取的顺序。观察到实例中,字母的排列有一定的周期性。在每个周期中,第一列全部排满,后面倾斜的部分占据除上下两行之外的所有行,所以倾斜部分共有。num_str_in_p=2*numRows-2#每个周期的字符个数(除最后一个周期外)通过观察可以知道,倾斜部分字母的索引都是第一行最后一个字母索引的倍数。接下来就可以根据每个周期的字母个数和字符串长度(总字母个数)计算需要多少个周期。根据以上分析,可知该二维数组的列数为每个周期的列数*周期数。
2024-10-16 10:49:48
832
原创 LeetCode第二题:两数相加(Python)
需要两个类:节点类和链表类。在节点类中定义节点类型;在链表类中定义头节点和相关操作。(下面代码以单链表为例)#节点类:包含数据域和指针域:数据域为参数输入;在创建新节点时指针域为空#链表类:包含头指针以及一些链表的操作#头指针#判断链表是否为空:头指针为空则链表为空#求链表的长度current=self.head#current是当前指针。这里直接让其指向头节点。count=0count+=1#向链表头部插入节点new_node=ListNode(val)#创建新节点。
2024-10-10 11:24:27
1360
原创 LeetCode第三题:最长无重复符号的子字符串(Python)
按照上述代码逻辑,substring="abc"时,下一个“a”在substring中已经有了,要将substring清除并从这个"a"开始记录,得到第二个无重复子字符串为“ae”。如果它在substring中,说明当前这个无重复子字符串已经结束,用一个新变量old_len记录下当前无重复子字符串长度和上一个无重复子字符串长度中较大的一个。在每一轮检查时都更新最大无重复子字符串长度,为当前子字符串长度和曾经的最大值之间较大的一个。同时利用集合的不可重复特性,将列表改为集合,从而更高效的检查重复字符。
2024-10-07 22:08:47
314
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅