回文檢測題解

2022-06-19 18:33:16 字數 915 閱讀 6340

題目右轉luogu1210

我看到這道題的第一想法是列舉答案 (長度)

但是很顯然會超時,怎樣優化列舉是關鍵

我想到了二分答案。但是二分答案要求答案具有單調性。

乍一看,似乎回文子串沒什麼單調性。但是如果我們將答案分為奇偶兩種,答案的單調性就出來了

1.當最長回文串長度是奇數時:

不妨假設長度為\(9\),那麼我們就會發現,\(9\)以下的奇數長度 (1,3,5,7) 都是存在回文串的,奇數的單調性我們找到了

2.當回文串為偶數時

同理,設長度為\(6\),\(6\)以下的偶數長度 (2,4) 也都是可以的。

然後我們就可以開始二分了

相信寫程式對各位dalao不是問題,上**:

#includeusing namespace std;

const int maxn=20005;

string s,t;int len1;

int begin,end;

int ans;

struct node

st[maxn];

bool ok(int x,int y)

return true;

}bool add(int x)

head++,tail++;

}return false;

}int main()

; s=' '+s;

int len=s.size()-1;

for(int i=1;i<=len;i++)

int lt=0,rt;

if(len1%2==0) rt=len1;

else rt=len1+1;

while(lt+2lt)//比較大小

else

return 0;

}

演算法 回文檢測

有關鍊錶的回文檢測,用到的就是鍊錶操作中常常用到的雙指標的方法,找到鍊錶的中點位置,然後依次對比兩邊的結點。但是在找鍊錶的中點的時候要注意鍊錶的總個數是偶數或者奇數的兩種情況。1.找鍊錶的中點位置,並把中點以前的各個結點的值存入到棧中。2.針對偶數或者奇數個鍊錶結點,對中點結點做乙個小的調整。3.依...

題解 回文陣列

給定有n個整數的陣列a,下標從1到n。如果對每乙個下標i均滿足a i a n i 1 則稱陣列是回文的。例如,陣列a 就是回文陣列。如果陣列a不是回文的,可以採用合併兩個相鄰元素的方法去得到回文陣列。注意,每操作一次,陣列的元素數量減少1。例如,陣列a 不是回文陣列,但是通過合併a 1 和a 2 得...

回文詞 題解

題目描述 回文詞是一種對稱的字串 也就是說,乙個回文詞,從左到右讀和從右到左讀得到的結果是一樣的。任意給定乙個字串,通過插入若干字元,都可以變成乙個回文詞。你的任務是寫乙個程式,求出將給定字串變成回文詞所需插入的最少字元數。比如字串 ab3bd 在插入兩個字元後可以變成乙個回文詞 dab3bad 或...