一道特殊的回文字串處理問題

2021-06-27 22:57:33 字數 631 閱讀 3528

.特殊之處在於:

1.僅考慮字母的回文,而輸出保留字串中的非字母字元

2.大小寫均視為相等。

舉例說明:he says: madam! i'm adam!

輸出將為——madam! i'm adam

這道題一開始給我帶來了很大的困擾,本來考慮的是在判斷回文的過程中,過濾掉非字母的角標。但是這個思路的程式邊界條件太過複雜,最終我還是放棄了。(參見第二段程式,失敗的部分我也貼上來已做記錄)

後來受到啟發,首先對字串做乙個預處理,建立乙個char * pre,來存放s中判斷為字母的部分的位址。然後通過對pre中回文的判斷,來確定回文的左右角標。

具體程式如下,其中的注釋記錄了在尋找bug過程中的種種問題。這對於以後的學習有很大幫助!

#include#includeusing namespace std;

const int n=500;

char s[n];

void tst(char a)

//尋找右邊第乙個非符號點。

if(isalpha(s[right])&&isalpha(s[left]))//必須是左右都有才能判斷。

if(left!=(i-1)&&left!=right)

{for(int j=++left;j

每日一道 LeetCode 32 驗證回文串

每天 3 分鐘,走上演算法的逆襲之路。每日一道 leetcode 前文合集 github gitee 給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸...

一道關於字串處理的題

題目要求 按要求分解字串,輸入兩個數m,n m代表輸入的m串字串,n代表輸出的每串字串的位數,不夠補0。例如 輸入2,8,abc 123456789 則輸出為 abc00000 12345678 90000000 include include include include include inc...

最長回文子串 說一道筆試熱題 最長回文子串

leetcode 5 最長回文子串 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。輸入 cbbd 輸出 bb 1.暴力法 public string longestpalindrome string s return ans 2.中心往兩邊擴充套件演算法你可能會問,為什麼會是 2n...