在刷到leetcode第657题的时候,看到一种解法是用分割后的字符串数组的长度去判断Robot是否能回到原点,代码如下:
moves= moves + " ";
return moves.split("L").length==moves.split("R").length && moves.split("U").length == moves.split("D").length;
两行代码就做出来了,看起来也十分直观,但是对于第一行,字符串moves 首尾都加了空格不理解什么意思,后来写了主函数进行调试,
public static void main(String[] args) {
String moves = "23@45872";
String [] a = moves.split("2");
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
System.out.println(",");
}
输出结果为: ,3@4587,
所以这说明对字符串以2作为分割符分割时,会在第一个2处自动添加一个空格,而末尾的2则不加空格。如果以3作为分隔符,结果为2,@45872,说明如果分割符不是首字符的时候,不会自动添加空格。因此moves首尾添加空格符就能理解了,如果不加的话,在以末尾的字符作为分割符时,会漏掉统计,比如moves是“UD”
这时候可以明显看出题目的正确结果应该返回true,但是moves.split(U").length=2(因为分割后为空格和D)而moves.split(D").length=1(分割后只有U),所以弄清原理后,可以只在末尾添加空格,即:
moves = moves + " ";
提交后Accept