leetcode214. 最短回文串

214. 最短回文串

難度困難114

給定一個字符串?s,你可以通過在字符串前面添加字符將其轉換為回文串。找到并返回可以用這種方式轉換的最短回文串。

示例?1:

輸入: "aacecaaa"
輸出: "aaacecaaa"

示例 2:

輸入: "abcd"
輸出: "dcbabcd"

思路:馬拉車求出以0開頭的最大回文串,然后在前面添加后面字符串的翻轉即可。

傻子都能看懂的馬拉車Manacher

class Solution {
public String preProcess(String s) {int n = s.length();if (n == 0) {return "^$";}String ret = "^";for (int i = 0; i < n; i++)ret += "#" + s.charAt(i);ret += "#$";return ret;
}// 馬拉車算法
public String shortestPalindrome(String s) {String T = preProcess(s);int n = T.length();int[] P = new int[n];int C = 0, R = 0;for (int i = 1; i < n - 1; i++) {int i_mirror = 2 * C - i;if (R > i) {P[i] = Math.min(R - i, P[i_mirror]);// 防止超出 R} else {P[i] = 0;// 等于 R 的情況}// 碰到之前講的三種情況時候,需要利用中心擴展法while (T.charAt(i + 1 + P[i]) == T.charAt(i - 1 - P[i])) {P[i]++;}// 判斷是否需要更新 Rif (i + P[i] > R) {C = i;R = i + P[i];}}//這里的話需要修改int maxLen = 0;int centerIndex = 0;for (int i = 1; i < n - 1; i++) {int start = (i - P[i]) / 2;//我們要判斷當前回文串是不是開頭是不是從 0 開始的if (start == 0) {maxLen = P[i] > maxLen ? P[i] : maxLen;}}return new StringBuilder(s.substring(maxLen)).reverse() + s;
}
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444235.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444235.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444235.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java對象的序列化

對象序列化就是把一個對象變為二進制數據流的一種方法。 一個類要想被序列化&#xff0c;就行必須實現java.io.Serializable接口。雖然這個接口中沒有任何方法&#xff0c;就如同之前的cloneable接口一樣。實現了這個接口之后&#xff0c;就表示這個類具有被序列化的能力。 先…

游戲服務器架構:網絡服務器端程序線程劃分

服務器端高性能網絡編程的核心在于架構,而架構的核心在于進程-線程模型的選擇。 作為服務器需要做網絡數據的收發,需要做數據庫拉取和保存,需要做日志存儲,需要做常規的游戲邏輯處理.....在這里我把這些功能劃分為三個大的線程類型:IO線程,事件線程,第三方庫線程。 …

游戲中的常見概率設計分析

前言游戲中的概率真的是讓人又愛又恨&#xff0c;很多玩家因為自己的屌絲氣質&#xff08;白嫖&#xff09;而棄坑玩不下去的&#xff0c;比如人盡皆知的某陰陽師&#xff0c;除了氪金&#xff0c;還肝&#xff0c;而且如果你的臉真的非常的黑&#xff0c;那也是打不過那些0氪金…

一個通用游戲后臺的設計模式實踐總結

搞業務開發的時候&#xff0c;發現有一些代碼的開發會讓人感覺非常簡便舒服&#xff0c;有一些代碼的開發卻有時候會讓人感覺心智負擔比較大。逐步總結的過程中&#xff0c;發現讓開發人員寫起來感覺舒服的代碼&#xff0c;大概率是因為當前模塊與其他模塊代碼耦合度低&#xf…

leetcode103. 二叉樹的鋸齒形層次遍歷

給定一個二叉樹&#xff0c;返回其節點值的鋸齒形層次遍歷。&#xff08;即先從左往右&#xff0c;再從右往左進行下一層遍歷&#xff0c;以此類推&#xff0c;層與層之間交替進行&#xff09;。 例如&#xff1a; 給定二叉樹 [3,9,20,null,null,15,7], 3 / \ 9 20 …

大型游戲后臺實踐淺談

國家新聞出版署8月30日下發切實防止未成年人沉迷網絡游戲的通知,要求從今天(9月1日)起,所有網絡游戲企業僅可在周五、周六、周日和法定節假日每日20時至21時向未成年人提供1小時服務,其他時間均不得以任何形式向未成年人提供網絡游戲服務。通知發布后,各大游戲廠商火速回…

如何使用弱網環境來驗證游戲中的一些延遲問題

關于弱網 在當今移動互聯網盛行的時代,網絡的形態除了有線連接,還2G/3G/Edge/4G/Wifi等多種手機網絡連接方式。不同的協議、不同的制式、不同的速率,使移動應用運行的場景更加豐富。 從測試角度來說,需要額外關注的場景就遠不止斷網、網絡故障等情況了。對于弱網的數據定義…

使用nginx分片功能提升緩存效率,支持可拖拽式播放視頻

Nginx的slice模塊可以將一個請求分解成多個子請求,每個子請求返回響應內容的一個片段,讓大文件的緩存更有效率。 HTTP Range請求 HTTP客戶端下載文件時,如果發生了網絡中斷,必須重新向服務器發起HTTP請求,這時客戶端已經有了文件的一部分,只需要請求剩余的內容,而不需要…

Nginx 配置TCP和UDP負載均衡

前言 Nginx除了以前常用的HTTP負載均衡外,Nginx增加基于TCP協議實現的負載均衡方法。 HTTP負載均衡,也就是我們通常所有“七層負載均衡”,工作在第七層“應用層”。而TCP負載均衡,就是我們通常所說的“四層負載均衡”,工作在“網絡層”和“傳輸層”。例如,…

leetcode116. 填充每個節點的下一個右側節點指針

116. 填充每個節點的下一個右側節點指針 難度中等128 給定一個完美二叉樹&#xff0c;其所有葉子節點都在同一層&#xff0c;每個父節點都有兩個子節點。二叉樹定義如下&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每個 next 指針&am…

你的代碼是否按照高內聚、低耦合的原則來設計的?

我們一直強調軟件開發中要按照高內聚、低耦合的設計原則來做代碼結構設計。c語言和c++不同,c語言面向過程、c++面向對象。 真正的項目中,要對業務升級,原來的業務函數需要保留,要保證老的功能繼續維持,不能直接刪除,這時候c語言面向過程,通常使用回調的方法。c+…

leetcode117. 填充每個節點的下一個右側節點指針 II

給定一個二叉樹 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每個 next 指針&#xff0c;讓這個指針指向其下一個右側節點。如果找不到下一個右側節點&#xff0c;則將 next 指針設置為 NULL。 初始狀態下&#xff0c;所有 next 指針都被…

你擔心大家會濫用的全局變量,大家(包括你自己)一定會濫用

前言 不要使用全局變量的道理大家都懂,基本上在大家學習編程過程中很早就會被教育到,但是有時候我們也會禁不住誘惑用到一些似非實是的全局變量,只不過這些全局變量會穿上馬甲,讓你不會一下看穿它的巨大危害,濫用全局變量會引申帶來其它更為嚴重的結構性系統問題。…

Android Studio下載安裝教程及開發環境搭建

Android Stuio是本次Google io的一大亮點啊&#xff0c;一大早起來就趕緊下載來玩玩了。。。 如果你不幸被墻了&#xff0c;可以去這個帖子下載&#xff0c;我已經上傳到百度盤里面了。 [Android利器]Android Studio下載地址來啰 。。http://www.eoeandroid.com/thread-275380-…

leetcode124. 二叉樹中的最大路徑和

難度困難314 給定一個非空二叉樹&#xff0c;返回其最大路徑和。 本題中&#xff0c;路徑被定義為一條從樹中任意節點出發&#xff0c;達到任意節點的序列。該路徑至少包含一個節點&#xff0c;且不一定經過根節點。 示例 1: 輸入: [1,2,3]1/ \2 3輸出: 6示例 2: 輸入: …

深入剖析阻塞式socket的timeout

前言 網絡編程中超時時間是一個重要但又容易被忽略的問題,對其的設置需要仔細斟酌。 本文討論的是socket設置為阻塞模式,如果socket處于阻塞模式運行時,就需要考慮處理socket操作超時的問題。 所謂阻塞模式,是指其完成指定的操作之前阻塞當前的進程或線程,直到操作…

leetcode165. 比較版本號 超級重要的細節

比較兩個版本號 version1 和 version2。 如果 version1 > version2 返回 1&#xff0c;如果 version1 < version2 返回 -1&#xff0c; 除此之外返回 0。 你可以假設版本字符串非空&#xff0c;并且只包含數字和 . 字符。 . 字符不代表小數點&#xff0c;而是用于分隔數…

游戲服務器緩存系統如何設計

前言 不管是在業界開源領域,還是內部分享中,很少會有專門針對游戲業務特征進行專門設計的組件、類庫或者框架。我們從游戲的客戶端方面來看,一款專業的游戲客戶端引擎,已經是游戲開發的標配,flash,Cocos,Unity,Unreal等,但是服務器端,我們幾乎找不到同樣重量級的產品…

leetcode574. 當選者(SQL)

表: Candidate -------------- | id | Name | -------------- | 1 | A | | 2 | B | | 3 | C | | 4 | D | | 5 | E | -------------- 表: Vote ------------------- | id | CandidateId | ------------------- | 1 | 2…

使用KCP 加速游戲消息,讓全球玩家流暢聯網

定義 kcp協議是傳輸層的一個具有可靠性的傳輸層ARQ協議。 它的設計是為了解決在網絡擁堵情況下tcp協議的網絡速度慢的問題。 kcp力求在保證可靠性的情況下提高傳輸速度。 kcp協議的關注點主要在控制數據的可靠性和提高傳輸速度上面,因此kcp沒有規定下層傳輸協議,一般用udp作為…