Skip to content

Commit 91d9b9b

Browse files
Create Longest Weird Subsequence.cpp
1 parent 442638f commit 91d9b9b

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#include <iostream>
2+
#include <cstring>
3+
using namespace std;
4+
5+
const int MAX_N = 2005, NO_OF_ALPHABETS = 26;
6+
int max_length[MAX_N][NO_OF_ALPHABETS][NO_OF_ALPHABETS];
7+
8+
void solve()
9+
{
10+
string S;
11+
cin >> S;
12+
13+
int answer = 1;
14+
15+
memset(max_length, 0, sizeof(max_length));
16+
for(int alpha = 0; alpha < NO_OF_ALPHABETS; alpha++)
17+
{
18+
max_length[0][S[0] - 'a'][alpha] = 1;
19+
max_length[0][alpha][S[0] - 'a'] = 1;
20+
}
21+
22+
for(int i = 1; i < S.size(); i++)
23+
{
24+
for(int up_alpha = 0; up_alpha < NO_OF_ALPHABETS; up_alpha++)
25+
{
26+
for(int down_alpha = 0; down_alpha < NO_OF_ALPHABETS; down_alpha++)
27+
{
28+
29+
max_length[i][up_alpha][down_alpha] = max(
30+
max_length[i - 1][up_alpha][down_alpha], max_length[i][up_alpha][down_alpha]);
31+
32+
int current_alpha = S[i] - 'a';
33+
if(up_alpha <= current_alpha)
34+
{
35+
max_length[i][current_alpha][down_alpha] = max(max_length[i][current_alpha][down_alpha],
36+
1 + max_length[i - 1][up_alpha][down_alpha]);
37+
}
38+
39+
if(down_alpha >= current_alpha)
40+
{
41+
max_length[i][up_alpha][current_alpha] = max(max_length[i][up_alpha][current_alpha],
42+
1 + max_length[i - 1][up_alpha][down_alpha]);
43+
}
44+
45+
answer = max(answer, max_length[i][up_alpha][down_alpha]);
46+
}
47+
}
48+
}
49+
50+
cout << answer << "\n";
51+
}
52+
53+
int main()
54+
{
55+
int no_of_test_cases;
56+
cin >> no_of_test_cases;
57+
58+
while(no_of_test_cases--)
59+
solve();
60+
61+
return 0;
62+
}
63+

0 commit comments

Comments
 (0)