leetcode 838 推多米诺

先用两个数组保存L,R的值,再遍历

 

    string pushDominoes(string dominoes) {
        string res = dominoes;
        vector left, right;
        for(int i = 0; i < res.size(); i++) {
            if(res[i] == 'l') left.push_back(i);
            else if(res[i] == 'r') right.push_back(i);
        }
        
        int i = 0, j = 0, pre = 0;
        while(i < left.size() && j < right.size()) {
            if(left[i] < right[j]) {
                for(int k = pre; k < left[i]; k++)
                    res[k] = 'l';
                i++;
            }
            else {
                for(int k = right[j]; k < right[j] + (left[i] - right[j]) / 2; k++) 
                    res[k] = 'r';
                for(int k = right[j] + (left[i] - right[j]) / 2 + 1; k < left[i]; k++) 
                    res[k] = 'l';
                i++, j++;
            }
            
            pre = left[i] + 1;
        }
        
        if(i < left.size()) {
            for(int k = pre; k < left.back(); k++)
                res[k] = 'l';
        }
        else {
            for(int k = right[j]; k < res.size(); k++)
                res[k] = 'r';
        }
        return res;
    }

 

你可能感兴趣的:(公司刷题)