题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805446102073344
套最长回文字串的模版,不过让我发现了必须先处理长度为1、2两种情况的,不然会有两个测试点不过

代码

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<string>
  4. using namespace std;
  5. const int maxn = 1010;
  6. int dp[maxn][maxn] = {0};
  7. string input;
  8. int main(){
  9. int ans = 1;
  10. getline(cin, input);
  11. for(int i = 0; i < input.size(); i++){
  12. dp[i][i] = 1;
  13. if(i < input.size() - 1){
  14. if(input[i]==input[i+1]){
  15. dp[i][i+1] = 1;
  16. ans = 2;
  17. }
  18. }
  19. }
  20. for(int L = 3; L <= input.size(); L++){
  21. for(int i = 0; i + L -1 < input.size(); i++){
  22. int j = i + L - 1;
  23. if(input[i] == input[j] && dp[i + 1][j - 1] == 1){
  24. dp[i][j] = 1;
  25. ans = L;
  26. }
  27. }
  28. }
  29. printf("%d", ans);
  30. return 0;
  31. }