结论是:一定是选取最长的那个AB连续子串。
把题面要求的a*b + a + b转化一下成(a + 1)*(b + 1) - 1,即可发现如果选取前缀后缀不连续的两段作为答案,则显然有更优解,即两段中较长的一段作为答案。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int main() { 5 ios_base::sync_with_stdio(0); 6 cin.tie(0); 7 8 string s, t; 9 long long ans = 0, last = 0; 10 cin >> s >> t; 11 for (int i = 0; i < s.length(); i++) { 12 if (s[i] == t[i]) { 13 last++; 14 } else { 15 last = 0; 16 } 17 ans = max(ans, last); 18 } 19 cout << (ans + 1) * (ans + 1) - 1 << endl; 20 }