每日一題 leetcode 336 回文對

2021-10-23 10:16:51 字數 1329 閱讀 4298

回文對

難度困難123

給定一組 互不相同 的單詞, 找出所有不同 的索引對(i, j),使得列表中的兩個單詞, words[i] + words[j]

,可拼接成回文串。

示例 1:

輸入:["abcd","dcba","lls","s","sssll"]

輸出:[[0,1],[1,0],[3,2],[2,4]]

解釋:可拼接成的回文串為 ["dcbaabcd","abcddcba","slls","llssssll"]

示例 2:

輸入:["bat","tab","cat"]

輸出:[[0,1],[1,0]]

解釋:可拼接成的回文串為 ["battab","tabbat"]

// bat tab cat

list

wordsrev =

newarraylist

();//儲存反轉字串

mapindices =

newhashmap

();public list

>

palindromepairs

(string[

] words)

// 將反轉字串作為key i作為值

for(

int i =

0; i < n;

++i)

list

> ret =

newarraylist

>()

;for

(int i =

0; i < n; i++

)// 比較字串

for(

int j =

0; j <= m; j++)}

if(j !=0&&

ispalindrome

(word,

0, j -1)

)}}}

return ret;

}// 雙指標比較 字串i j是否相等

public

boolean

ispalindrome

(string s,

int left,

int right)

}return

true;}

// 返回指定的對映,如果不存在,那麼就返回乙個defaultvalue

public

intfindword

(string s,

int left,

int right)

每日一題 LeetCode

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...

LeetCode每日一題(題1028)

最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...

LeetCode每日一題(題139)

題目 題目大意 給出乙個字串s和乙個字串陣列words,判斷s是否能夠拆分成多個words中的字串。分析 這道題比較簡單的方式應該是採用動態規劃來做。對於任意乙個字串中的區間,可以判斷該區間組成的字串是否在字典中,如果是,則這個區間的真假取決於前面那個區間的真假。給出狀態轉移方程dp i dp j ...