统计星号
难度:
标签:
题目描述
代码结果
运行时间: 23 ms, 内存: 16.0 MB
/*
* 思路:
* 使用Java Stream流处理方法来简化计数过程。
* 使用正则表达式将字符串以'|'分割成多个部分,仅对奇数索引的部分进行'*'的计数。
*/
import java.util.Arrays;
public class Solution {
public int countAsterisks(String s) {
return (int) Arrays.stream(s.split("\\|")).filter(str -> Arrays.asList(s.split("\\|")).indexOf(str) % 2 == 0)
.mapToLong(str -> str.chars().filter(ch -> ch == '*').count()).sum();
}
}
解释
方法:
此题解的思路基于对字符串s的分割处理。首先,使用'|'作为分隔符对字符串s进行分割,得到一个数组a,其中数组的每个元素是竖线'|'之间的字符串。根据题目要求,每两个竖线'|'为一对,因此数组a中,索引为偶数的元素(0, 2, 4, ...)是不在竖线对之间的部分。接着,遍历数组a的偶数索引位置的元素,统计每个元素中星号'*'的数量,并累加到最终结果ans中。最后返回累加的结果ans。
时间复杂度:
O(n)
空间复杂度:
O(n)
代码细节讲解
🦆
在解决方案中,如果输入字符串s以'|'开头或结尾,或者包含连续的'|',这种情况下解决方案如何处理?
▷🦆
解决方案中假设了'|'总是成对出现,如果'|'的数量是奇数,这种情况应该如何处理?
▷🦆
题解中提到,如果字符串中没有'|',直接返回所有的'*'的数量。请问,这种做法是否考虑了所有可能的边界情况?
▷🦆
在使用split('|')方法后,数组a的偶数索引位置代表了不在'|'对内的字符串片段。为什么选择忽略奇数索引位置的星号?
▷