在字符串末尾添加字符使其成为回文串
生活随笔
收集整理的這篇文章主要介紹了
在字符串末尾添加字符使其成为回文串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
易得到了一個僅包含大小寫英文字符的字符串,該字符串可能不是回文串。(“回文串”是一個正讀和反讀都一樣的字符串,比如“level”或者“noon”等等就是回文串,“asds”就不是回文串。)
小易可以在字符串尾部加入任意數量的任意字符,使其字符串變成回文串。
現在請你編寫一個程序,程序要能計算出小易可以得到的最短回文串。
#include<bits/stdc++.h> using namespace std;bool judge(int start,int end,string s){//判斷該部分字符串 是否是回文 while(start<end){if(s[start]!=s[end]) break;start++;end--;}if(start==end||s[start]==s[end]) return true;//sds就會出現start=end這種情況||ss字符串就會出現start!=endreturn false; }int main(){string str;cin >> str;int end = str.size()-1;//最后一個字符的位置 int start = end;for(int i=0;i<str.size();i++){if(judge(i,end,str)){ //如果是回文 start = i;break;}} for(int i=start-1;i>=0;i--){str+=str[i];}cout << str << endl;return 0; } //#define CRTDBG_MAP_ALLOC //放在程序最前 #include <iostream> #include<vector> #include<string> #include <unordered_map> #include <unordered_set> #include <map> #include <queue> #include <algorithm>//算法頭文件 #include <numeric> #include <stack> #include<typeinfo> #include<regex> #include<stdio.h> #include <stdlib.h> #include <crtdbg.h> #include <thread> //#include<bits/stdc++.h>using namespace std;const long long cc = 1000000; const long long pp = 2000000; char s[pp];//注意S數組的大小至少要開C數組的兩倍 char c[cc];//注意S數組的大小至少要開C數組的兩倍 long long p[pp];//P可以理解為回文字符串的半徑void init()//初始化S數組 {long long i, j;s[0] = '@';for (i = 0; c[i] != 0; i++){s[2 * i + 1] = '#';s[2 * i + 2] = c[i];} s[2 * i + 1] = '#';s[2 * i + 2] = 0; } void manacher(long long len) {long long id = 0, mx = 0;long long maxLen = 0, start = 0;for (long long i = 1; s[i] != 0; i++){if (mx > i)p[i] = min(p[2 * id - i], mx - i);elsep[i] = 1;while (s[i + p[i]] == s[i - p[i]])p[i]++;if (i + p[i] > mx){mx = i + p[i];id = i;}}mx = 0;for (long long i = 1; s[i] != 0; i++){if (p[i] > mx){mx = p[i];start = (i - p[i]) / 2;maxLen = mx - 1;//mx-1是回文子串的長度,start是回文子串的起始位置}}cout << len - maxLen << endl; } int main()//用cin\cout 會超時 {string ss;getline(cin, ss);reverse(ss.begin(), ss.end());long long len = ss.size();for (long long i = 0; i < len; i++) {c[i] = ss[i];}init();manacher(len);return 0; }總結
以上是生活随笔為你收集整理的在字符串末尾添加字符使其成为回文串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python cv2 轮廓的包络 面积_
- 下一篇: C++实现全排列