字串的回文與映象

2022-07-29 05:00:20 字數 1616 閱讀 1438

給你乙個字串,如何判斷這個字串是不是回文串和映象串。

看試一道很簡單的題,但真正能把握住這道題卻很難!

下面介紹三種方法,各有亮點:

第一種方法:先把可以映象的字元用hash表給儲存起來,給出的字串的一半入棧,如果這個字串的長度為奇數,則這個字串中間這個字元如果映象後的字元和原來不相同,則這個字串肯定不是映象字串,然後每次出棧乙個,和下乙個字元進行對比,如果出棧的字元和下乙個字元不相等,則肯定不是回文字串,如果在hash表中,並映象後,和下乙個相等,則有可能是映象字串 ;

詳細**如下:

#include #include #include #include using namespace std;

int main()

if (len % 2 != 0)

for (; pos < len; pos++)

if (!rev.count(checker.top()) || rev[checker.top()] != s[pos])

checker.pop();

} printf("%s -- ", s);

if (palin && mirror)

printf("is a mirrored palindrome.");

else if (palin && !mirror)

printf("is a regular palindrome.");

else if (!palin && mirror)

printf("is a mirrored string.");

else if (!palin && !mirror)

printf("is not a palindrome.");

printf("\n\n");

} return 0;

}

第二種方法:

先用hash表將可以映象的字元儲存起來,從給出的字串的最後一位開始逆序重建字串,如果重建的和原來相同,就是回文,如果經過映象之後重建的和原來相同,就是映象串!

詳細**如下:

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define ll long long

#define sc scanf

#define pf printf

#define pi 2*acos(0.0)

using namespace std;

int main()

if (s==a && s==b)

cout《第三種方法:

#include#include#include#includeusing namespace std ;

int is_h_w( char *s )

char a = ;

char b = ;

int is_j_x( char *s )

else

} return 1 ;

}int main()

return 0 ;

}

映象字串

映象字串 就是根據自己設定的轉換表對字串進行轉換。python中用maketrans來建立字元對映的轉換表 str.maketrans intab,outtab 第乙個引數是字串,表示需要轉換的字元,第二個引數也是字串表示轉換的目標。兩個字串的長度必須相同,為一一對應的關係。translate 方法...

字串?(回文)

g 字串?description 回文串是指ababa,abba,cccc這樣左右對稱的字串。每個字串我們都可以新增若干個字元使它變成乙個回文串。每次新增乙個字元都會耗費一定的時間,我們規定第一次新增耗費1s,第二次2s,第三次3s,第n次n秒。請問最少需要多長時間可以使現有的字串變成回文字串?in...

字串 驗證回文串

問題 力扣演算法面試彙總 問題描述 給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。例子 輸入 a man,a plan,a canal panama 輸出 true 輸入 s a man,a plan,a canal pa...