京东笔试第二题(回文序列)题解
#include <iostream>
#include <string>
using namespace std;
string s;
long long ans=0;
void help(int left, int right, int cnt)
{
if (left >= right) ans += cnt;
for (int i = left;i < right;i++)
{
int j = right;
while (j>i)
{
while (s[i] != s[j] && j>i) j--;
if (j == i) break;
help(i + 1, j - 1, cnt + j - i);
j--;
}
}
}
int main()
{
cin >> s;
help(0, s.size() - 1, 0);
cout << ans + s.size() << endl;
return 0;
}
//笔试的时候陷入了死循环,勉强过20%。后来自己小改了一下,不知道正确与否,请大神指正!
#实习##笔试题目#
#include <string>
using namespace std;
string s;
long long ans=0;
void help(int left, int right, int cnt)
{
if (left >= right) ans += cnt;
for (int i = left;i < right;i++)
{
int j = right;
while (j>i)
{
while (s[i] != s[j] && j>i) j--;
if (j == i) break;
help(i + 1, j - 1, cnt + j - i);
j--;
}
}
}
int main()
{
cin >> s;
help(0, s.size() - 1, 0);
cout << ans + s.size() << endl;
return 0;
}
//笔试的时候陷入了死循环,勉强过20%。后来自己小改了一下,不知道正确与否,请大神指正!
#实习##笔试题目#