C++ simple solution with explanantion


#1

string makePalindrome(string a){

    for(int i=0;i<a.size()/2;++i){

        a[a.size()-i-1] = a[i];

    }

    return a;

}

bool checkIsAll9(string str){

    for(int i=0;i<str.size();++i){

            if(str[i]!=‘9’)

                return false;

        }

    return true;

}

string Solution::solve(string str) {

    //check if all 9s

    bool flag = checkIsAll9(str);

    string s;

    if(flag){

        s.push_back(‘1’);

        s.append(str.size()-1,‘0’);

        s.push_back(‘1’);

        return s;

    }

    //making palindrome with current str and check if its greater then return.

    s=makePalindrome(str);

    if(s>str)

        return s;

    //find mid for even or odd respectively.

    int mid=str.size()/2;

    if(str.size()%2==0)

        mid–;

    //if mid is 9 then put 0 and decrease mid…do this until all the 9s are replaced.

    //there will be a character not equal to 9 and the loop will end.

    while(str[mid]==‘9’){

        str[mid] =‘0’;

        --mid;

    }

    //increase the character which is not 9 and make palindrome again. 

    //This palindrome wuill be smallest greater.

    str[mid]++;

    s=makePalindrome(str);

    return s;

}


#2

I dont think checkIsAll9 function is needed.