String Problem Asked inCvent Online Assessment Experience
Difference between en1 and en2, changed 35 character(s)
In a recent online assessment I was asked the following question:↵
===================================================================↵
You are given a string consisting of lower case letters only. You are allowed to remove one or more consecutive characters if they are similar. For each removal of character/characters you get points based on number of characters removed and points_array. You have to continue this process till the string is empty. ↵
If n characters removed then: points = points_array[n] ( 1 based indexing ).↵
You have to maximize the total points earned.↵

Example:↵
s = "aabaabaa"↵
points_array = [1, 2, 1, 1, 1, 10, 1, 1]↵

_s -> "aabaabaa"_↵

_s -> "aaaabaa" +1 ( removed "b" )_↵

_s -> "aaaaaa" +1  ( removed "b" )_↵

_s -> "" +10 ( removed "aaaaaa" )_↵

points earned are 12↵

Constraints:↵

**1 <= len(s) <= 100**↵

**len(points_array) == len(s)**↵

**0 <= points_array[i] <= 10^6**↵

#### I was able to figure out recursive solution using stack:↵

~~~~~↵
#include <iostream>↵
#include <vector>↵
#include <stack>↵
#include <algorithm>↵

using namespace std;↵

int recUtil(stack<int> st, vector<int> &points, string s, int ind)↵
{↵
  if (ind == s.size())↵
  {↵
    if (st.size() == 0)↵
    {↵
      return 0;↵
    }↵
    char top = st.top();↵
    st.pop();↵
    int ans = points[0] + recUtil(st, points, s, ind);↵
    int count = 1;↵
    while (!st.empty() && st.top() == top)↵
    {↵
      st.pop();↵
      count += 1;↵
      ans = max(ans, points[count - 1] + recUtil(st, points, s, ind));↵
    }↵
    return ans;↵
  }↵
  else↵
  {↵
    st.push(s[ind]);↵
    int ans = recUtil(st, points, s, ind + 1);↵
    char top = st.top();↵
    st.pop();↵
    ans = max(ans, points[0] + recUtil(st, points, s, ind + 1));↵
    int count = 1;↵
    while (!st.empty() && st.top() == top)↵
    {↵
      st.pop();↵
      count += 1;↵
      ans = max(ans, points[count - 1] + recUtil(st, points, s, ind + 1));↵
    }↵
    return ans;↵
  }↵
}↵
int main()↵
{↵
  string s = "abbbacabbba";↵
  vector<int> points = {1, 8, 10, 7, 6, 4, 8, 0, 8, 5, 9};↵
  stack<int> st;↵
  cout << recUtil(st, points, s, 0) << endl;↵
  return 0;↵
}↵
~~~~~↵

**Any suggestions or editorial to solve such problem optimally**↵



History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en2 English itssocialkks 2024-09-16 09:19:20 35
en1 English itssocialkks 2024-09-15 09:37:56 2275 Initial revision (published)