周赛题练习-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