prabaprakash/Hackerrank-JavaScript-Solutions

High Value Palindrome

prabaprakash opened this issue · 1 comments

Algo

#include <bits/stdc++.h>

using namespace std;

string richieRich(string s, int n, int k){
   int lives=k;
   vector<bool> mod(n,false);  
   string temp(s); 
    
   for (int i=0;i<n/2;i++) 
   {
       if (temp[i]!=temp[n-i-1]) {mod[i]=true;lives--;}
       if (temp[i]<temp[n-i-1]) temp[i]=temp[n-i-1]; else if (temp[i]>temp[n-i-1]) temp[n-i-1]=temp[i];
       if (lives<0) return "-1";       
   }
    int j=0;
   while ((lives>0)&&(j<n/2))
   {
      if (temp[j]!='9'){
      if (mod[j]) lives++;
      if (lives>1) {temp[j]='9';temp[n-j-1]='9'; lives-=2;}
      }       
      j++;        
   }
    if (n%2==1) {if (lives>0) temp[n/2]='9';} 
    return temp;
}

int main() {
    int n;
    cin >> n;
    int k;
    cin >> k;
    string s;
    cin >> s;
    string result = richieRich(s, n, k);
    cout << result << endl;
    return 0;
}

js solution

function highestValuePalindrome(s, n, k) {
    let lives = k;
    let mod = new Array(n).fill(false);
    let temp = s.split('');
    for (let i = 0; i < n / 2; i++) {
        let j = n - i - 1;
        if (temp[i] != temp[j]) {
            mod[i] = true;
            lives--;
        }
        if (temp[i] < temp[j])
            temp[i] = temp[j];
        else if (temp[i] > temp[j])
            temp[j] = temp[i];
        if (lives < 0)
            return "-1";
    }
    let j = 0;
    while ((lives > 0) && (j < n / 2)) {
        if (temp[j] != '9') {
            if (mod[j])
                lives++;
            if (lives > 1) {
                temp[j] = '9';
                temp[n - j - 1] = '9';
                lives -= 2;
            }
        }
        j++;
    }
    if (n % 2 == 1) {
        if (lives > 0)
            temp[Math.floor(n / 2)] = '9';
    }
    return temp.join('');
}