class Solution { public: /* 总共有 4种情况 1,存往左边倒 2,存往右边倒 3,两边倒,刚好同时抵消 4,两边倒,刚好中间有一根被抵消到 */ string pushDominoes(string dominoes) { int n = dominoes.length(),left,right; for(int i = 0; i < n; i++){ if(dominoes[i] == '.'){ left = i; while(i < n && dominoes[i] == '.') i++; right = i; // 当一边往左倒的时候 L ...L if(left == 0 || dominoes[left - 1] == 'L'){ if(right < n && dominoes[right] == 'L'){ for(int j = left; j < right; j++){ dominoes[j] = 'L'; } } }else{ // 当一边往右倒的时候 R ... R if(right == n || dominoes[right] == 'R'){ for(int j = left; j < right; j++){ dominoes[j] = 'R'; } }else{ // 当想中间靠拢的时候 R .... L while(left < right - 1){ dominoes[left++] = 'R'; //dominoes[right--] = 'L'; dominoes[right - 1] = 'L'; right--; } } } } } return dominoes; } }; |