周赛题练习-easy模块
2315. 统计星号
解题思路
本题的题意是计算每两|之外的*数目,例如*|**ac|*,返回2个,即首尾的*。
方法一
- 直接使用String.spit()函数按
|对字符串拆分成字符串数组(注意正则表达式转义字符的坑) - 下标为偶数的在框内,奇数的在框外,依次计数即可
时间复杂度O(n)
空间复杂度O(n)
class Solution {
public int countAsterisks(String s) {
int res = 0;
String[] strs = s.split("\\|");
for (int i = 0; i < strs.length; i++) {
if (i % 2 == 0) {
for (char c : strs[i].toCharArray()) {
if (c == '*') {
res++;
}
}
}
}
return res;
}
}
方法二
- 直接遍历字符进行计数,初始化变量
pairNum,表示为每一对|的计数变量 - 由
*|*|*可知,当pairNum=0可对*计数 - 当
pairNum=1时,把*的计数累加到res,计数变量置0 - 当
pairNum=2时,即一对|满了,将pairNum置0
时间复杂度O(n)
空间复杂度O(1)
class Solution {
public int countAsterisks(String s) {
int pairNum = 0;
int res = 0;
int temp = 0;
for (char c : s.toCharArray()) {
if (c == '|') {
pairNum++;
} else if (c == '*' && (pairNum == 0)) {
temp++;
}
if (pairNum == 2) {
pairNum = 0;
} else if (pairNum == 1) {
res += temp;
temp = 0;
}
}
return res + temp;
}
}
本文来自博客园,作者:LogBiao,转载请注明原文链接:https://www.cnblogs.com/logbiao/p/16464342.html

浙公网安备 33010602011771号