838. Push Dominoes
Solution
這題的concept是找到以下4種我們可以處理的區間
L.........L => LLLLLLL R.........R => RRRRRR L.........R => L..........R R.........L => RRRLLL or RRR.LLLL 所以使用two pointer的技巧去找出符合的interval,然後因為頭尾可能是'.',頭尾加上R + oldString + L,讓它好處理... 這蠻tricky的。 注意: 每次加入的是interval中間的值,不包含頭尾i , j 的值,只有在i != 0 時更新 i,而且最後不更新尾。
public void append(StringBuilder sb, char c, int times){
int n = 0;
while(n < times){
sb.append(c);
n++;
}
}
public String pushDominoes(String dominoes) {
dominoes = "L" + dominoes + "R";
StringBuilder sb = new StringBuilder();
for(int i = 0, j = 1; j < dominoes.length(); j++){
if(dominoes.charAt(j) == '.'){
continue;
}
if(i != 0){
sb.append(dominoes.charAt(i));
}
int middleCount = j - i -1;
if(dominoes.charAt(i) == dominoes.charAt(j)){
append(sb, dominoes.charAt(i), middleCount);
}
else if (dominoes.charAt(i) == 'L' && dominoes.charAt(j) == 'R'){
append(sb, '.', middleCount);
}
else{
append(sb, 'R', middleCount/2);
if(middleCount % 2 != 0){
sb.append('.');
}
append(sb, 'L', middleCount/2);
}
i = j;
}
return sb.toString();
}
Last updated
Was this helpful?