class Solution{
public:
string maxSum(string w,char x[], int b[],int n){
// code here
unordered_map<char,int> mp;
for(int i=0;i<w.size();i++)
{
mp[w[i]]=int(w[i]);
}
for(int i=0;i<n;i++)
{
mp[x[i]]=b[i];
}
vector<int> v(w.size());
for(int i=0;i<w.size();i++)
{
v[i]=mp[w[i]];
}
int edx=0, mxl=0, mxg=INT_MIN;
for(int i=0;i<w.size();i++)
{
mxl=max(v[i], v[i]+mxl);
if(mxl>mxg)
{
mxg=mxl;
edx=i;
}
}
int sdx=edx;
while(sdx>=0)
{
mxg-=v[sdx];
if(mxg==0) break;
if(sdx==0) break;
sdx--;
}
string ans="";
for(int i=sdx;i<=edx;i++)
{
ans+=w[i];
}
return ans;
}
};