Untitled

 avatar
unknown
plain_text
3 years ago
1.6 kB
10
Indexable
class Solution {
    
    
    int getPossibleSeq(int nextAvailable, int countI, int countD, string &result, bool &isFirst){
        string resultI = "";
        string resultD = "";
        if(!isFirst)countI--;
        for(int i = 0; i < countI; i++){
            resultI += to_string(nextAvailable);
            nextAvailable++;
        }
        
        for(int i = 0; i <= countD; i++){
            resultD += to_string(nextAvailable);
            nextAvailable++;            
        }       
        reverse(resultD.begin(), resultD.end());
        result = result + resultI + resultD;
        return nextAvailable;
    }
    
    
public:
    string smallestNumber(string pattern) {
        int i = 0;
        int nextAvailable = 1;
        int count = 0;
        string result = "";
        bool isFirst = true;
        while(i < pattern.size()){
            
            if((i == pattern.size()-1) || (pattern[i] == 'D')){
                if(pattern[i] == 'I'){count++;i++;}
                int countI = count;
                while((i < pattern.size()) && (pattern[i] == 'D')){
                    count++;
                    i++;
                }
                int countD = count - countI;
                int maxEle = nextAvailable + count - 1;
                nextAvailable = getPossibleSeq(nextAvailable, countI, countD, result, isFirst);
                //Ren-initialise
                count = 0;
                if(isFirst == true)isFirst = false;
            } 
            else {
                count++;
                i++;
            }     
        }
        return result;
    }
};
Editor is loading...