永发信息网

面试算法题:你的任务就是计算出长度为n的字符串(只包含‘A’、‘B’和‘C’),有多少个是暗黑字符串。

答案:2  悬赏:30  手机版
解决时间 2021-03-03 18:43
  • 提问者网友:不爱我么
  • 2021-03-03 07:34
一个只包含'A'、‘B’、‘C’的字符串,如果存在某一段长度为3的连续子串中恰好‘A’、‘B’、‘C’各有一个,那么这个字符串就是纯洁的,否则这个字符串就是暗黑的。
例如:
1. BAACAACCBAAA 连续子串'CBA'中包含了‘A’、‘B’、‘C’各一个,所以为纯洁字符串
2. AABBCCAABB 不存在一个长度为3的连续子串包含‘A’、‘B’、‘C’,所以为暗黑字符串

以下这种解法如何解释?求大神解释一下
#include
#include
#include
using namespace std;

long dp[33][3][3];

int main() {

for (int i = 0; i < 3; i ++) {
for (int j = 0; j < 3; j ++) {
dp[2][i][j] = 1;
}
}

for (int len = 2; len < 30; len ++) {
for (int i = 0; i < 3; i ++) {
for (int j = 0; j < 3; j ++) {
for (int k = 0; k < 3; k ++) {
int s = (1 << i) | (1 << j) | (1 << k);
if (s == 7) {
continue;
}
dp[len + 1][j][k] += dp[len][i][j];
}
}
}
}

int n;
while (cin >> n) {
if (n == 0) {
cout << 1 << endl;
} else if (n == 1) {
cout << 3 << endl;
} else {
long ans = 0;
for (int i = 0; i < 3; i ++) {
for (int j = 0; j < 3; j ++) {
ans += dp[n][i][j];
}
}
cout << ans << endl;
}
}
}
最佳答案
  • 五星知识达人网友:玩家
  • 2021-03-03 09:06
程序肯定不是判断一个字符串是纯洁的还是黑暗的。从现有的题目描述看,程序和题目没有关系。

题目是否不全?
全部回答
  • 1楼网友:你哪知我潦倒为你
  • 2021-03-03 10:38
我不会~~~但还是要微笑~~~:)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯