jsp判断字符串相等_最长回文字符串三种解法
先解釋一下什么是回文字符串,比如說字符串“aba”,無論是從先往后讀取還是從后往前讀取,結(jié)果都是一樣的。當給定很長的字符串時,如何快速獲取到最長的回文字符串,這也是大廠比較常見的算法面試題,那么這里給出三種解法。
- 1.暴力窮舉法思路:即遍歷每種子字符串,然后判斷該子字符串是否為回文(即前半部分是否等于后半部分),時間復雜度為O(n*n*n)
暴力窮舉
- 2.中間擴散法
從每一個位置出發(fā),向兩邊擴散即可。遇到不是回文的時候結(jié)束。
1.首先往左尋找與當期位置相同的字符,直到遇到不相等為止。
2.然后往右尋找與當前位置相同的字符,直到遇到不相等為止。
3.最后左右雙向擴散,直到左和右不相等。如下圖所示:
中間擴散法
3.動態(tài)規(guī)劃法
一開始我剛聽到動態(tài)規(guī)劃這個詞的時候感覺很高大上,后來經(jīng)過查找資料發(fā)現(xiàn)其實很簡單,只不是從下向上的計算,說白了就是空間換時間,把中間的計算結(jié)果暫存起來,避免重復計算;
思路:
1.我們用一個 boolean dp[i][j]表示字符串從 i 到 j 這段是否為回文。
2.試想如果dp[i][j]=true,我們要判斷 dp[i-1][j+1]是否為回文。
只需要判斷字符串在(l-1)和(r+1)兩個位置是否為相同的字符,是不是減少了很多重復計算。動態(tài)規(guī)劃關(guān)鍵是找到初始狀態(tài)和狀態(tài)轉(zhuǎn)移方程。
初始狀態(tài),l=r 時,此時 dp[l][r]=true。
狀態(tài)轉(zhuǎn)移方程,dp[l][r]=true 并且(l-1)和(r+1)兩個位置為相同的字符,此時 dp[l-1][r+1]=true。
動態(tài)規(guī)劃法
總結(jié)
以上是生活随笔為你收集整理的jsp判断字符串相等_最长回文字符串三种解法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 斯宾塞:2022 年 Xbox 游戏阵容
- 下一篇: apk 反编译_APK反编译与回编译修改