給你乙個字串,如何判斷這個字串是不是回文串和映象串。
看試一道很簡單的題,但真正能把握住這道題卻很難!
下面介紹三種方法,各有亮點:
第一種方法:先把可以映象的字元用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...