【CCCC】L2-008 最長對稱子串 (25分),直接列舉遍歷
problem
L2-008 最長對稱子串 (25分)
對給定的字串,本題要求你輸出最長對稱子串的長度。例如,給定Is PAT&TAP symmetric?,最長對稱子串為s PAT&TAP s,於是你應該輸出11。
輸入格式:
輸入在一行中給出長度不超過1000的非空字串。
輸出格式:
在一行中輸出最長對稱子串的長度。
輸入樣例:
Is PAT&TAP symmetric?
輸出樣例:
11
solution
- 給定一個字串,輸出最長對稱子串的長度。
- 第一個想法是二分長度,每次O(n)列舉起點,O(m)判斷,複雜度O(logn*n*m)
- 然後其實可以直接列舉對稱軸O(n),每次向左右掃描判定O(m/2),複雜度O(n*m/2),省去了不必要的遍歷(即左右不等時直接停止,不用判斷整個長的字串)(算是一種比較貼合題意的遍歷方式)
#include<bits/stdc++.h>
using namespace std;
int main(){
string s; getline(cin,s);
int ans = 1;//資料5:最小子串是1
for(int i = 0; i < s.size(); i++){
int l = i, r = i+1;
if(s[l]==s[r]){//偶數串
l--; r++;
while(l>=0&&r<s.size() && s[l]==s[r]){l--;r++;}
}else if(l>0 && s[--l]==s[r]){//奇數串
l--; r++;
while(l>=0&&r<s.size() && s[l]==s[r]){l--;r++;}
}
l++;r--;
ans = max(ans,r-l+1);
}
cout<<ans<<endl;
return 0;
}
相關文章
- L2-008 最長對稱子串 分數 25
- L2-008 最長對稱子串【最長迴文字串】字串
- 最長子串
- 最長上升子串
- JavaScript 遍歷、列舉與迭代JavaScript
- lCS(最長公共子串)
- 最長公共子串 二維陣列 Go實現陣列Go
- java 最長迴文子串Java
- C# 列舉遍歷和轉換C#
- js可列舉屬性的遍歷JS
- 線性dp:最長公共子串
- 5. 最長迴文子串
- 無重複字元的最長子串字元
- 最長迴文子串 -- 三種解答
- LeetCode 5.最長迴文子串LeetCode
- JavaScript騷操作之遍歷、列舉與迭代(下篇)JavaScript
- JavaScript騷操作之遍歷、列舉與迭代(上篇)JavaScript
- JS陣列遍歷和獲取陣列最值JS陣列
- Leetcode[字串] 5. 最長迴文子串LeetCode字串
- 3 無重複字元的最長子串字元
- LeetCode——無重複字元的最長子串LeetCode字元
- 每日一算--最長迴文子串
- java無重複字元的最長子串Java字元
- 演算法-兩最長迴文子串演算法
- LeetCode-5. 最長迴文子串(Manacher)LeetCode
- 3. 無重複字元的最長子串字元
- LeetCode題集-5 - 最長迴文子串(一)LeetCode
- leetcode 之無重複字元的最長子串LeetCode字元
- [動態規劃] 六、最長迴文子串動態規劃
- 演算法之字串——最長迴文子串演算法字串
- 最長迴文子串你學會了嗎?
- 【LeetCode】3 無重複字元的最長子串LeetCode字元
- 陣列遍歷陣列
- 978 最長湍流子陣列陣列
- LeetCode133:給定一個字串,找出最長的不具有重複字元的子串的長度。例如,“abcabcbb”不具有重複字元的最長子串是“abc”,長度為3。對於“bbbbb”,最長的不具有重複字元的子串是LeetCode字串字元
- 陣列常見的遍歷迴圈方法、陣列的迴圈遍歷的效率對比陣列
- 淺談最長迴文子串求法——字串雜湊字串
- Leetcode 3. 無重複字元的最長子串LeetCode字元