leetcode 214 Shortest Palindrome

lc214 Shortest Palindrome

可以將問題轉化成找到原字符串的最長palindrome子串(注意,子串必須以s[0]為起始)

例如:sdserf

sds為最長palindrome子串

只需要將sds之后的子串翻轉一下,補充到原字符串之前即可

fre + sdserf

?

那么如何找到最長palindrome子串呢?

使用KMP

s + “@” + reverse(s)

@的目的是保證s的每一位都與其翻轉后相應位置對應,避免由于字符串長度為奇數或為偶數而產生的差別

與原版KMP算法稍微有一些區別,原版kmp表的每一位kmp[i]表示s(0~i-1)不包含i,而這里的KMP表則應該包含i,為s(0~i)

除此之外,由于我們這里只需要求kmp表而不需要考慮模式串和主串的匹配,所以不需要將kmp[0]設為-1,而是直接設為0

具體KMP的算法原理可以參見:https://www.cnblogs.com/yjiyjige/p/3263858.html

 1 class Solution {
 2     public String shortestPalindrome(String s) {
 3         String temp = s + "!" + new StringBuilder(s).reverse().toString();
 4         
 5         int[] KMP = kmp(temp);
 6         return new StringBuilder(s.substring(KMP[KMP.length-1])).reverse() + s;
 7         
 8     }
 9     private int[] kmp(String s){
10         int k=0;
11         int[] res = new int[s.length()];
12         
13         for(int i=1; i<s.length()-1; ){
14             if(s.charAt(k) == s.charAt(i)){
15                 res[i] = ++k;
16                 i++;
17             }else{
18                 if(k > 0){
19                     k = res[k-1];
20                 }else{
21                     i++;
22                 }
23             }
24         }
25         return res;
26     }
27 }

?

轉載于:https://www.cnblogs.com/hwd9654/p/11042492.html

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

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

相關文章

程序員深度學習!我想談談關于Android面試那些事,附贈課程+題庫

想要成為一名優秀的Android開發&#xff0c;你需要一份完備的知識體系&#xff0c;在這里&#xff0c;讓我們一起成長為自己所想的那樣~。 25%的面試官會在頭5分鐘內決定面試的結果60%的面試官會在頭15分鐘內決定面試的結果 一般來說&#xff0c;一場單面的時間在30分鐘左右&…

MOSS 代替Spring Boot Admin 的服務治理工具

1.1 什么是服務治理 服務治理&#xff0c;我也稱之為微服務治理&#xff0c;是指用來管理微服務的整個生命周期。包括應用的創建&#xff0c;服務名的規范&#xff0c;服務的上下線&#xff0c;服務的遷移&#xff0c;整個服務的生老病死等方方面面的治理。 1.2 Moss概述 Mo…

Django之form表單組件、cookie與session

---恢復內容開始--- Form表單組件 引例&#xff1a; 先來看一個注冊的例子&#xff0c;全部用的是reg函數來實現的。 views.py文件 def reg(request):errors {username:,password:}if request.method POST:username request.POST.get(username)password request.POST.get(p…

程序員經驗分享:Android高級工程師系列學習路線介紹,面試必備

前言 曾聽過很多人說Android學習很簡單&#xff0c;做個App就上手了&#xff0c;工作機會多&#xff0c;畢業后也比較容易找工作。這種觀點可能是很多Android開發者最開始入行的原因之一。 在工作初期&#xff0c;工作主要是按照業務需求實現App頁面的功能&#xff0c;按照設…

Java實現將文件或者文件夾壓縮成zip

Java實現將文件或者文件夾壓縮成zip 最近碰到個需要下載zip壓縮包的需求&#xff0c;于是我在網上找了下別人寫好的zip工具類。但找了好多篇博客&#xff0c;總是發現有bug。因此就自己來寫了個工具類。 這個工具類的功能為&#xff1a; &#xff08;1&#xff09;可以壓縮文件…

算法題+JVM+自定義View,隔壁都饞哭了

反思 昨晚去北京大望路阿里面試, 產生了嚴重的挫敗感, 羞愧難當. 比不得從大學就有目標有理想, 一直在為目標努力學習技術的同學, 在大學唯一能拿得出手的就是參加了電子設計大賽, 學了點嵌入式的知識. 畢業后開始做android, 說得好聽點叫做項目, 實際上就是搬代碼, 真正記到…

n2n內網穿透打洞部署全過程 + nginx公網端口映射

內網穿透、打洞工具有很多&#xff0c;此前在windows上使用的是vidcc這個玩意&#xff0c;也正因為linux不支持。自此在linux嘗試過一些打洞工具&#xff0c;ssh 反向代理這些&#xff0c;因為安全性不便捷等多種原因&#xff0c;最終選擇了n2n。 由于初次接觸n2n&#xff0c;對…

Windows下快速刪除上萬個文件和子目錄

為什么會慢 如果直接在Windows文件管理器里刪除的話&#xff08;通過菜單或者鍵盤Del或者ShiftDel&#xff09;&#xff0c;刪除這個數量的文件需要大概10幾分鐘&#xff0c;具體根據文件數量目錄層次不同耗時不同。這么慢是因為在刪除之前系統有個準備階段&#xff0c;在這個階…

終于有人把安卓程序員必學知識點全整理出來了,BAT大廠面試總結

行業激烈變化時&#xff0c;恰恰是機會最多的時候 坦白講&#xff0c;許多人骨子里害怕變化和競爭。 其實大可不必。 一來&#xff0c;怕也沒用嘛。二來&#xff0c;變化越快&#xff0c;組合要素增加了&#xff0c;意味著新的工作機會越多。 就像傳統媒體VS新媒體。 放在…

c#反混淆工具de4dot 一般混淆都可以解決

c#反混淆工具de4dot 一般混淆都可以解決 使用方法&#xff1a; 1、CMD 打開 De4Dot 所在文件夾 最好是以管理員身份運行CMD 2、輸入 De4Dot C:\Users\muzigaiyu\Desktop\demo.exe 回車 成功后會在軟件所在文件夾生成 demo-cleaned.exe 在用dotpeek 或者其他軟件打開exe即可看…

餐廳點餐系統:測試與部署

項目測試與部署 1.系統測試 項目調試完成后&#xff0c;將項目打包成war包放入tomcat/wabapps文件夾&#xff0c;本機啟動tomcat&#xff0c;redis緩存&#xff0c;mysql數據庫等服務&#xff0c;本機訪問localhost&#xff1a;8080/BookFood&#xff0c;測試系統的各個功能是否…

SpringCloud與Seata分布式事務初體驗

在本篇文章中我們在SpringCloud環境下通過使用Seata來模擬用戶購買商品時由于用戶余額不足導致本次訂單提交失敗&#xff0c;來驗證下在MySQL數據庫內事務是否會回滾。 本章文章只涉及所需要測試的服務列表以及Seata配置部分。 用戶提交訂單購買商品大致分為以下幾個步驟&…

想學IT的必看!今年Android面試必問的這些技術面,架構師必備技能

第一次觀看我文章的朋友&#xff0c;可以關注、點贊、轉發一下&#xff0c;每天分享各種干貨技術和程序猿趣事 前言 職場的金三銀四跳槽季又來了&#xff0c;不同的是今年比往年「冷」一些&#xff0c;形式更加嚴峻一些&#xff0c;大家多多少少可能都聽到或看到一些信息&…

springboot集成redis使用redis作為session報錯ClassNotFoundException類RememberMeServices

springboot 集成redis使用redis作為緩存&#xff0c;會報錯的問題。 錯誤信息&#xff1a; java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration.taskSchedulerat org.springframew…

阿里巴巴分布式事務利器Seata環境準備

阿里巴巴自從跟SpringCloud共同發起創建微服務開源社區時&#xff0c;開啟了SpringCloud Alibaba分支&#xff0c;而且在生態內提供了一款適用于分布式應用程序&#xff08;Dubbo、SpringCloud等&#xff09;的事務框架Seata&#xff0c;該框架經過多個大版本的發布&#xff0c…

對于‘敲什么都隊’自主開發的《校園服務》軟件的使用體驗

信1805-1 邊信哲 20183694 在六月十三日我系組織的2017級軟件工程交流大會中&#xff0c;我為第十一組敲什么都隊’自主開發的《校園服務》軟件投出了我的一票&#xff0c;在為數眾多的校園服務類軟件中&#xff0c;《校園服務》最吸引我的地方就是他們的軟件能完成數據…

阿里P7大牛親自教你!BAT這種大廠履歷意味著什么?積累總結

金九銀十過后各大網絡平臺都是各種面經分享&#xff0c;包括已收offer&#xff0c;或面試失敗的都有&#xff0c;相信大部分人都拿到了自己心儀的大廠offer&#xff0c;不過也有沒有少數沒能進到自己內心向往的大廠而懊惱的&#xff0c;那么到底如何才能進大廠&#xff0c;該準…

啟動mac版docker自帶的k8s

最近準備好好學習下k8s&#xff0c;為了圖方便&#xff0c;直接使用docker集成的k8s&#xff0c;但是網上找了一些教程但都沒能一次性成功&#xff0c;只好自己從頭跑一遍&#xff0c;順手寫個教程可以方便有類似需求的同學參考。 話不多說&#xff0c;直接上步驟。 1.下載doc…

yum安裝mysql

在CentOS7中默認安裝有MariaDB&#xff0c;這個是MySQL的分支&#xff0c;但為了需要&#xff0c;還是要在系統中安裝MySQL&#xff0c;而且安裝完成之后可以直接覆蓋掉MariaDB。 1. 下載并安裝MySQL官方的 Yum Repository 1[rootBrianZhu /]# wget -i -c http://dev.mysql.com…

springboot很多以來jar包是在外部當時候,如何打dockerfile到阿里云

首先保證springboot與各種jar包文件夾在同一目錄 dockerfile如下內容 FROM frolvlad/alpine-oraclejdk8 VOLUME /usr/cloud ADD lib /lib/ ADD lib_attachment /lib_attachment/ ADD lib_bigdata /lib_bigdata/ ADD lib_bpm /lib_bpm/ ADD lib_deploy /lib_deploy/ ADD lib_el…