** * 给一个字符串,只由x和.构成 * x 代表墙不能装灯 * .代表居民点,可以装灯 * 如果灯放在i位置可以让 i-1 i i+1位置被点亮,返回需要点亮所有区域至少需要多少灯 *
public class LightsNumber {
public static void main(String[] args) {
String str = "...x..xxx.x..x.";
//String str = "x.x.xx...xxx.xx...x";
//String str = ".xx......x..x.";
char[] dots = str.toCharArray();
System.out.println(lights(dots));
}
public static int lights(char[] dots) {
//安装的路灯数
int res = 0;
int i = 0;
while (i < dots.length) {
//如果该位置为x代表是墙,直接跳过
if (dots[i] == 'x') {
i++;
} else {//否则就是 . 代表居民点
//只要进入这个逻辑就必须安装灯 所以 res++
res ++;
//先判断下一个位置是否会越界
if (i + 1 < dots.length) {
//分析当前点的后一个
if (dots[i + 1] == 'x') {
i += 2; //如果是 x 直接跳过
} else {
i += 3; //否则是 . 不管 [i,i+3)之间什么情况必须安置一个灯
}
} else {
//越界跳出
break;
}
}
}
return res;
}
}
左神算法学习