日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 86分割链表87扰乱字符串

發布時間:2025/3/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的。


具體實現代碼上,我使用遞歸的方式,通過字符串轉成字符數組優化一點速度。

class Solution {public boolean isScramble(String s1, String s2) {if(s1.equals(s2))return true;if(s1.length()!=s2.length())return false;char ch1[]=s1.toCharArray();char ch2[]=s2.toCharArray();int count[]=new int[26];for(int i=0;i<ch2.length;i++){count[ch1[i]-'a']++;count[ch2[i]-'a']--;}for(int i=0;i<26;i++){if(count[i]!=0)//計數看看單詞是否等{return false;}}for(int i=1;i<ch1.length;i++)//進行劃分,遞歸的匹配{if(isScramble(s1.substring(0,i), s2.substring(0, i))&&isScramble(s1.substring(i), s2.substring(i))){return true;}if(isScramble(s1.substring(0,i), s2.substring(s2.length()-i))&&isScramble(s1.substring(i), s2.substring(0,s2.length()-i))){return true;}}return false; } }

至于動態規劃的解題方法,是一個從下往上的遞推過程,實現上需要考慮下邊界初始化和遞推式,這里就不實現啦,有興趣的可以參考官網。

結語

原創不易,bigsai請你幫兩件事幫忙一下:

  • star支持一下, 您的肯定是我在平臺創作的源源動力。

  • 微信搜索「bigsai」,關注我的公眾號,不僅免費送你電子書,我還會第一時間在公眾號分享知識技術。加我還可拉你進力扣打卡群一起打卡LeetCode。

  • 記得關注、咱們下次再見!

    總結

    以上是生活随笔為你收集整理的LeetCode 86分割链表87扰乱字符串的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。