• 算法题练习——JS Node+python题解NC53 删除链表的倒数第n个节点、NC127 最长公共子串


    目录

    NC53 删除链表的倒数第n个节点

    NC127 最长公共子串 


    NC53 删除链表的倒数第n个节点

    描述

    给定一个链表,删除链表的倒数第 n 个节点并返回链表的头指针
    例如:

    给出的链表为: 1→2→3→4→5, n= 2n=2.
    删除了链表的倒数第 nn 个节点之后,链表变为1→2→3→5.

    数据范围: 链表长度 0≤n≤1000,链表中任意节点的值满足0≤val≤100

    要求:空间复杂度 O(1),时间复杂度 O(n)

    备注:题目保证 n 一定是有效的

    示例1

    输入:{1,2},2

    返回值:{2}

    解析:

    • 本题有两种解法,一种是用快慢指针,快指针先走n步,在快慢指针同时走,最后快指针结束时慢指针的下一个就是要删除的元素了;
    • 第二种就是我下面的解法,先遍历出链表的长度,再直白的找到要删除的点,删除就好了;

    JavaScript题解:

    1. /*
    2. * function ListNode(x){
    3. * this.val = x;
    4. * this.next = null;
    5. * }
    6. */
    7. /**
    8. *
    9. * @param head ListNode类
    10. * @param n int整型
    11. * @return ListNode类
    12. */
    13. function removeNthFromEnd( head , n ) {
    14. // write code here
    15. if(!head) return null
    16. let node = head
    17. let len = 0
    18. while(node){
    19. node = node.next
    20. len++
    21. }
    22. node = head
    23. if(len-n==0) return head.next
    24. for(let i=0;i1;i++){
    25. node = node.next
    26. }
    27. node.next = node.next.next
    28. return head
    29. }
    30. module.exports = {
    31. removeNthFromEnd : removeNthFromEnd
    32. };

    python题解:

    1. # class ListNode:
    2. # def __init__(self, x):
    3. # self.val = x
    4. # self.next = None
    5. #
    6. # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    7. #
    8. #
    9. # @param head ListNode类
    10. # @param n int整型
    11. # @return ListNode类
    12. #
    13. class Solution:
    14. def removeNthFromEnd(self , head: ListNode, n: int) -> ListNode:
    15. # write code here
    16. node = head
    17. len = 0
    18. while node:
    19. node = node.next
    20. len += 1
    21. node = head
    22. if len-n==0:
    23. return head.next
    24. for i in range(len-n-1):
    25. node = node.next
    26. node.next = node.next.next
    27. return head

    NC127 最长公共子串 

    描述

    给定两个字符串str1和str2,输出两个字符串的最长公共子串

    题目保证str1和str2的最长公共子串存在且唯一。 

    数据范围:1≤∣str1∣,∣str2∣≤5000
    要求: 空间复杂度 O(n^2)O(n2),时间复杂度 O(n^2)O(n2)

    示例1

    输入:"1AB2345CD","12345EF"

    返回值:"2345"

    JavaScript题解 :

    1. /**
    2. * longest common substring
    3. * @param str1 string字符串 the string
    4. * @param str2 string字符串 the string
    5. * @return string字符串
    6. */
    7. function LCS( str1 , str2 ) {
    8. // write code here
    9. if(str1.lengthlength){
    10. [str1,str2] = [str2,str1]
    11. }
    12. let max = 0
    13. let res = ''
    14. for(let i=0; ilength; i++){
    15. const tmp = str1.slice(i-max,i+1)
    16. if(str2.match(tmp)){
    17. res = tmp
    18. max++
    19. }
    20. }
    21. return res
    22. }
    23. module.exports = {
    24. LCS : LCS
    25. };

    python题解:

    1. #
    2. # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    3. #
    4. # longest common substring
    5. # @param str1 string字符串 the string
    6. # @param str2 string字符串 the string
    7. # @return string字符串
    8. #
    9. class Solution:
    10. def LCS(self , str1: str, str2: str) -> str:
    11. # write code here
    12. if len(str1)<len(str2):
    13. str1,str2 = str2,str1
    14. res = ''
    15. max_len = 0
    16. for i in range(len(str1)):
    17. if str1[i-max_len:i+1] in str2:
    18. res = str1[i-max_len:i+1]
    19. max_len += 1
    20. return res

  • 相关阅读:
    Servlet中乱码解决
    C语言暑假学习刷题——Day8
    C++初阶学习第三弹——类与对象(上)——初始类与对象
    idea plugins一直在转圈解决方法
    合肥工业大学计算机网络实验二
    网络安全常见问题隐患及其应对措施
    Spring Cloud Function Spel表达式注入漏洞分析
    Http和websocket(用Nodejs简单实现websocket通信)
    一本企业画册怎么制作成二维码分享
    【Vue】params和query的区别?实战两种路由传参方式
  • 原文地址:https://blog.csdn.net/weixin_53919192/article/details/126769684