【LeetCode Hot100】双指针:分离指针
前言本章学习目的掌握两个指针分别遍历不同序列解法。这个解法通常用于两个序列之间做匹配合并插入交换。88:合并两个有序数组题目要求给你两个有序数组要求把两个数组合并到其中一个数组并且还是有序核心思路我们定义三个指针i → nums1 有效部分末尾m-1j → nums2 末尾n-1k → nums1 最后位置mn-1因为nums1的末尾都是0所以我们从末尾添加数字代码实现intim-1;intjn-1;intkmn-1;while(i0j0){if(num1[i]nums2[j]){nums1[k]nums1[i];i--}else{nums1[k]nums2[j];j--;}k--;while(j0){nums1[k]nums2[j];j--;k--;}总结双指针分别从后向前遍历两个数组。28找出字符串中第一个匹配项的下标题目要求在 haystack 里找 needle 第一次出现的位置字符串匹配问题核心思路定义两个指针i → 指向 haystack主串j → 指向 needle子串流程i 从 0 开始遍历主串j 从 0 开始匹配子串如果字符相等 → i, j如果不等 → 回退 ij 归0代码实现classSolution{publicintstrStr(Stringhaystack,Stringneedle){if(needle.length()0)return0;inti0;// 主串指针intj0;// 子串指针while(ihaystack.length()){if(haystack.charAt(i)needle.charAt(j)){i;j;// 完全匹配if(jneedle.length()){returni-j;}}else{// 回退关键ii-j1;j0;}}return-1;}}总结用双指针分别遍历两个字符串通过比较字符是否相等来完成解答1768交替合并字符串题目要求给你两个字符串word1 “abc”word2 “pqr”要求:交替合并 → apbqcr核心思想两个指针各走各的轮流取字符代码实现inti0;intj0;StringBuilderresnewStringBuilder();while(iword1.length.length()||iword2.length()){if(iword1.length()){res.append(word1.charAt(i));i;}else{if(jword2.length()){res.append(word2.charAt(j));j;}}returnres.toString();总结掌握字符串于数组之间转换的语法StringBuilder可变字符串类型添加appendcharAt392判断子序列题目要求给定字符串 s 和 t 判断 s 是否为 t 的子序列。代码实现classSolution{publicbooleanisSubsequence(Strings,Stringt){inti0;intj0;if(s.length()t.length())returnfalse;//前置条件while(is.length()jt.length()){if(t.charAt(j)s.charAt(i)){i;}j;}returnis.length();}}总结本章学习的是双指针分离指针一般都是定义多个指针每一个指针遍历多个数组进行判断或者拼接。