给你一个字符串 s
,每 两个 连续竖线 '|'
为 一对 。换言之,第一个和第二个 '|'
为一对,第三个和第四个 '|'
为一对,以此类推。
请你返回 不在 竖线对之间,s
中 '*'
的数目。
注意,每个竖线 '|'
都会 恰好 属于一个对。
示例 1:
输入:s = "l|*e*et|c**o|*de|" 输出:2 解释:不在竖线对之间的字符加粗加斜体后,得到字符串:"l|*e*et|c**o|*de|" 。 第一和第二条竖线 '|' 之间的字符不计入答案。 同时,第三条和第四条竖线 '|' 之间的字符也不计入答案。 不在竖线对之间总共有 2 个星号,所以我们返回 2 。
示例 2:
输入:s = "iamprogrammer" 输出:0 解释:在这个例子中,s 中没有星号。所以返回 0 。
示例 3:
输入:s = "yo|uar|e**|b|e***au|tifu|l" 输出:5 解释:需要考虑的字符加粗加斜体后:"yo|uar|e**|b|e***au|tifu|l" 。不在竖线对之间总共有 5 个星号。所以我们返回 5 。
提示:
1 <= s.length <= 1000
s
只包含小写英文字母,竖线'|'
和星号'*'
。s
包含 偶数 个竖线'|'
。
我们定义一个整型变量 *
时是否能计数,初始时
遍历字符串 *
,则根据 |
,则
最后返回计数的结果。
时间复杂度
class Solution:
def countAsterisks(self, s: str) -> int:
ans, ok = 0, 1
for c in s:
if c == "*":
ans += ok
elif c == "|":
ok ^= 1
return ans
class Solution {
public int countAsterisks(String s) {
int ans = 0;
for (int i = 0, ok = 1; i < s.length(); ++i) {
char c = s.charAt(i);
if (c == '*') {
ans += ok;
} else if (c == '|') {
ok ^= 1;
}
}
return ans;
}
}
class Solution {
public:
int countAsterisks(string s) {
int ans = 0, ok = 1;
for (char& c : s) {
if (c == '*') {
ans += ok;
} else if (c == '|') {
ok ^= 1;
}
}
return ans;
}
};
func countAsterisks(s string) (ans int) {
ok := 1
for _, c := range s {
if c == '*' {
ans += ok
} else if c == '|' {
ok ^= 1
}
}
return
}
function countAsterisks(s: string): number {
let ans = 0;
let ok = 1;
for (const c of s) {
if (c === '*') {
ans += ok;
} else if (c === '|') {
ok ^= 1;
}
}
return ans;
}
impl Solution {
pub fn count_asterisks(s: String) -> i32 {
let mut ans = 0;
let mut ok = 1;
for &c in s.as_bytes() {
if c == b'*' {
ans += ok;
} else if c == b'|' {
ok ^= 1;
}
}
ans
}
}
public class Solution {
public int CountAsterisks(string s) {
int ans = 0, ok = 1;
foreach (char c in s) {
if (c == '*') {
ans += ok;
} else if (c == '|') {
ok ^= 1;
}
}
return ans;
}
}
int countAsterisks(char* s) {
int ans = 0;
int ok = 1;
for (int i = 0; s[i]; i++) {
if (s[i] == '*') {
ans += ok;
} else if (s[i] == '|') {
ok ^= 1;
}
}
return ans;
}