本文介绍了求取两个长度不超过5000的字符串的唯一最长公共子串的问题,要求时间、空间复杂度均为 O(n²)。给出基于动态规划的 Java 实现:使用一维 dp 数组逆序遍历,实现递推公式 dp[j+1]=dp[j]+1(字符相等)或置零(字符不等),并在遍历过程中记录最长子串的长度及其在 str1 中的结束位置,最后通过 substring 提取并返回结果。

该文章介绍了如何解决“删除链表的倒数第n个节点”的问题。问题要求在O(1)的空间复杂度和O(n)的时间复杂度内,删除给定链表中倒数第n个节点并返回链表的头指针。 提供的Java代码解决方案采用双指针法:先让一个指针(cur)向前移动n步,然后同时移动两个指针(cur和pre),直到cur到达链表末尾。此时,pre指针就指向待删除节点的前一个节点,通过调整pre.next指针即可完成删除操作。代码考虑了n为0或链表为空的情况,以及需要删除头节点的情况,确保了代码的健壮性。

本文介绍了判断仅包含'()[]{}'四种括号的字符串是否为合法括号序列的问题,要求时间、空间均为O(n)。核心思路是使用栈:遍历字符时,遇左括号将对应的右括号压入栈;遇右括号时检查栈顶是否匹配,不匹配或栈空即返回false。遍历结束后,栈为空则序列合法。代码实现简洁,满足题目约束。

该文章介绍了如何找出链表中环的入口结点。题目要求在O(1)空间复杂度和O(n)时间复杂度内解决。文章提供了一个Java解决方案,核心思想是使用快慢指针检测链表中是否存在环。如果存在环,快慢指针最终会相遇。相遇后,将快指针重置到链表头,然后快慢指针同时以相同速度前进,再次相遇的位置即为环的入口结点。如果没有环,`hasCycle`函数返回null,则`EntryNodeOfLoop`函数也返回null。文章通过示例说明了不同情况下的输入和预期输出,并给出了完整的代码实现。

本文介绍了 NC22 “合并两个有序的数组” 题目要求:给定已排序的整数数组 A(长度 m)和 B(长度 n),A 预留 m+n 空间,将 B 的元素直接合并到 A 中并保持升序。约束为 0≤m,n≤100,元素绝对值≤100。实现思路是使用双指针 p1、p2 遍历 A、B,比较当前元素大小,将较小者写入新建的长度为 m+n 的临时数组 sorted,遍历结束后再把 sorted 内容拷贝回 A。代码展示了完整的 merge 函数实现,满足不返回结果、后台直接打印 A 的需求。

该文章介绍了如何判断一个链表中是否存在环,并给出了Java代码实现。核心思想是使用快慢指针法,快指针每次移动两步,慢指针每次移动一步。如果链表中存在环,快慢指针最终会相遇;否则,快指针会先到达链表的末尾。该算法的时间复杂度为O(n),空间复杂度为O(1),满足题目要求。文章还提供了几个示例,并详细解释了输入数据的含义以及预期输出,方便读者理解和调试。