回文相關演算法

2021-08-04 03:15:40 字數 2586 閱讀 7567

每次面試的時候問演算法的時候否**,近期計畫去刷一下演算法,也在此做一下記錄

判斷乙個正整數是不是回文數。

回文數的定義是,將這個數反轉之後,得到的數仍然是同乙個數。

11, 121, 1, 12321 這些是回文數。

23, 32, 1232 這些不是回文數。

依次對num取餘,採用臨時引數reverse 記錄轉化後的數字,最後對比reverse與num是否相等即可

public

boolean palindromenumber(int num)

return

reverse==num;

}

給定乙個字串,判斷其是否為乙個回文串。只包含字母和數字,忽略大小寫。

「a man, a plan, a canal: panama」 是乙個回文。

「race a car」 不是乙個回文。

1、根據題目描述,只包含字母和數字,需要踢除空格,標點符號等特殊符號,並且統一需要將字串轉為大寫或者小寫

踢除空格,標點符號等特殊符號:我採用正規表示式:

s=s.replaceall("\\pp|\\ps|\\pz", "")
說明:

unicode 編碼並不只是為某個字元簡單定義了乙個編碼,而且還將其進行了歸類。

/pp 其中的小寫 p 是 property 的意思,表示 unicode 屬性,用於 unicode 正表示式的字首。

大寫 p 表示 unicode 字符集七個字元屬性之一:標點字元。

其他六個是

l:字母;

m:標記符號(一般不會單獨出現);

z:分隔符(比如空格、換行等);

s:符號(比如數學符號、貨幣符號等);

n:數字(比如阿拉伯數字、羅馬數字等);

c:其他字元

2、回文的定義是乙個字串順著讀和反著讀都是一樣的字串,解法有很多,我這裡提供一種

將字串轉為陣列,記錄頭位址front和尾位址end,向中間掃瞄,front>end,結束掃瞄。

if (s == null)

s = s.replaceall("\\pp|\\ps|\\pz", "").tolowercase();

char arr = s.tochararray();

int front = 0, end = arr.length - 1;

while (front

< end)

}return

true;

}

設計一種方式檢查乙個鍊錶是否為回文鍊錶

1->2->1 就是乙個回文鍊錶。

解法我這裡有兩中思路,一種是把整個鍊錶反轉,逐個比較,這個可能性能偏差,一種是找到鍊錶的中間位置,反轉中間節點之後的鍊錶,然後和整個鍊錶對比,如果 中間位置的鍊錶到結尾了,說明該鍊錶是回文鍊錶,第一種相對比較簡單,我這裡提供第二種解法

/**

* 定義鍊錶類

**/class listnode

}/**

*@param head a listnode

*@return a boolean

*/public

boolean

ispalindrome(listnode head)

//找到中間節點

listnode middle = findmiddle(head);

//對中間節點之後的節點進行反轉,重新賦值給middle鍊錶,

middle= reverse(middle.next);

//兩個鍊錶的長度不一樣,但是middle的節點比較少,也就是middle會先結束迴圈,如果middle.next還有節點就跳出迴圈,說明該鍊錶不是回文鍊錶,反之是回文鍊錶。

while(head!=null&&middle!=null&&head.val==middle.val)

return middle==null;

}// 找到兩個鍊錶的中間節點

//當鍊表長度為奇數時,slow剛好是鍊錶中間節點。fast在最後乙個節點 。當鍊表長度為偶數時,slow的節點剛好到中間節點的前乙個節點。fast在倒數第二個節點。slow.next就是下乙個鍊錶的頭結點。

public listnode findmiddle(listnode head)

listnode slow = head,fast = head.next;

while(fast!=null&&fast.next!=null)

return slow;

}//反轉鍊錶

public listnode reverse(listnode head)

return prev;

}

花了好幾個小時,終於寫完了,擼起袖子就是幹!

演算法相關 最長回文字串

最長回文字串題目描述 catcher 是mca國的情報員,他工作時發現敵國會用一些對稱的密碼進行通訊,比如像這些abba,aba,a,123321,但是他們有時會在開始或結束時加入一些無關的字元以防止別國破解。比如進行下列變化 abba 12abba,aba abakk,123321 5123321...

LeetCode回文相關

目錄 647.回文子串 獲取所有的子串 方法一 奇數和偶數拓展 方法二 動態規劃 重要 5.最長回文子串 方法一 拓展 然後更新最長的數 680.驗證回文字串 可以刪除乙個字元 方法一 遇到不對勁直接刪除然後再對比 131.分割回文串 方法一 遞迴 重要 給定乙個字串,你的任務是計算這個字串中有多少...

回文數相關

例子 輸入 121 輸出 true 輸入 121 輸出 falsebool ispalindrome int x int r 0 while x r return x r x r 10 12 123 10 解析 快慢指標找到鍊錶的中點。12321,slow指到3,讓fast指向slow.next為2...