LeetCode 86分割链表87扰乱字符串
微信搜一搜:bigsai 專注于Java、數據結構與算法,一起進大廠不迷路!
算法文章題解全部收錄在github倉庫bigsai-algorithm,求star!
關注回復進群即可加入力扣打卡群,歡迎劃水。近期打卡:
LeetCode 73矩陣置零&74搜素二維矩陣&75顏色分類
Leetcode 76最小覆蓋子串&77組合&78子集
LeetCode 79單詞搜索&80刪除排序數組中的重復項Ⅱ&81.搜索旋轉排序數組Ⅱ
如有幫助,記得一鍵三連!
分割鏈表
題目描述:
給定一個鏈表和一個特定值 x,對鏈表進行分隔,使得所有小于 x 的節點都在大于或等于 x 的節點之前。
你應當保留兩個分區中每個節點的初始相對位置。
示例:
輸入: head = 1->4->3->2->5->2, x = 3
輸出: 1->2->2->4->3->5
分析:
這題的話也很簡單,它要求將小于x的節點放到前面,且相對位置不變。我們可以采用兩個鏈表將其分割開來然后再合并,在具體的處理上,可以創建兩個帶頭節點的鏈表,遍歷這個鏈表,其中一個收集比x小的節點,另一個收集比x大的節點,最后組合一下即可。
實現代碼為:
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/ class Solution {public ListNode partition(ListNode head, int x) {ListNode smallhead=new ListNode(0);//頭節點 0不使用ListNode smallteam=smallhead;//進行遍歷ListNode bighead=new ListNode(0);//頭ListNode bigteam=bighead;//遍歷使用while (head!=null) {if(head.val<x){smallteam.next=head;smallteam=smallteam.next;}else {bigteam.next=head;bigteam=bigteam.next;}head=head.next;}smallteam.next=bighead.next;//拼接bigteam.next=null;//置空return smallhead.next;} }時間的話都是0ms。
擾亂字符串
分析:
題意很清晰,就問你s1能不能轉換成s2。本題可以采用遞歸和動態規劃的方式,兩者一個是從前往后,一個是從后往前進行遞推。
判斷是否能夠經過遞歸交換轉換而來,首先兩個字符串s1和s2需要等長,然后其中的元素種類和個數也需要完全相同才行。(具體實現上可以借助hashmap或者數組進行計數統計)。
相同之后可能有很多種劃分需要一一的進行比較,可以遞歸向下進行(要有遞歸信任),分的兩個組合情況有一個可以交換即可認為是true的。
具體實現代碼上,我使用遞歸的方式,通過字符串轉成字符數組優化一點速度。
至于動態規劃的解題方法,是一個從下往上的遞推過程,實現上需要考慮下邊界初始化和遞推式,這里就不實現啦,有興趣的可以參考官網。
結語
原創不易,bigsai請你幫兩件事幫忙一下:
star支持一下, 您的肯定是我在平臺創作的源源動力。
微信搜索「bigsai」,關注我的公眾號,不僅免費送你電子書,我還會第一時間在公眾號分享知識技術。加我還可拉你進力扣打卡群一起打卡LeetCode。
記得關注、咱們下次再見!
總結
以上是生活随笔為你收集整理的LeetCode 86分割链表87扰乱字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5张图搞懂Java深浅拷贝
- 下一篇: LeetCode 88合并两个有序数组8