
现在在这里尝试一下代码:
题目:求一个长度不超过15的字符串的回文子序列个数(子序列长度>=1)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
#include<string> #include<cmath> using namespace std;
void (int* ptr,int n) { for (int i = 0; i < n; i++) { if (*(ptr + i) == 0) { *(ptr + i) = 1; for (int k = 0; k < i; k++) { *(ptr + k) = 0; } break; } } }
string reverse(string a) { int n = a.size(); string b(a); for (int i = 0; i < n; i++) { b[i] = a[n - i - 1]; } return b; }
int main() { string s; cin >> s; int n = s.size(); int* ptr = new int[n](); int sum = 0; for (int i = 0; i < (pow(2, n) - 1); i++) { move(ptr, n); string a = ""; for (int j = 0; j < n; j++) { if (ptr[j] == 1) { a += s[j]; } } if (a == reverse(a)) { sum += 1; } } delete[] ptr; cout << sum << endl; return 0; }
|
近期评论