这是一个简单的problem,其中说明是:
您有一个字符串,其中每两个连续的垂直条'|'分为一对。换句话说,第一和第二'|'做一对,第三和第四'|'做一对,等等。
返回S中的''的数量,不包括每对'|'。
之间的''请注意,每个'|'
将完全属于一对。示例1:
输入:s =“ l | e*et | c 或|*|”
输出:2
说明:考虑到的字符是强调的:“ l |*e*et | c *o |*de |”。
第一个和第二个“ |”之间的字符被排除在答案之外。另外,第三和第四'|'之间的字符被排除在答案之外。
考虑了2个星号。因此,我们返回2。
示例2:
输入:s =“ iamProgrammer”
输出:0
说明:在此示例中,s中没有星号。因此,我们返回0。示例3:
帕尔加尔的PPE:Sodyoney? 输出:5
说明:考虑到的字符是强调的:“ yo | uar | e | b | e *** au | tifu | l”。考虑了5个星号。因此,我们返回5。约束:
1 <= s.length <= 1000
S由小写的英文字母,垂直条'|'和星号'*'。
组成 S包含均匀数量的垂直条'|'。
乍一看,将其完成的一种方法是使用垂直条将字符串分开,然后忽略每个奇数并计算星号,但实际上您不需要这样做,您可以迭代字符串和立即计数(要么计数条或使用布尔值来验证)。
class Solution {
public int countAsterisks(String s) {
int counter = 0;
boolean notIgnore = true; // flag that will swap when vertical bar found
for(int i=0 ; i<s.length() ; i++) {
// retrieving char
char c = s.charAt(i);
// ignoring the ones not needed
if(c != '*' && c != '|') continue;
// checking if is asterisk and to be ignored or not
if(c == '*') {
if(notIgnore) counter++;
} else {
notIgnore = !notIgnore;
}
}
return counter;
}
}
运行时:2毫秒,比计数Asterisks的Java在线提交的71.32%快。
内存使用率:40.7 MB,不到Count Asterisks的Java在线提交的37.11%。
可以做的另一种情况是使用正则表达式和替换,但这对于一个简单的问题来说是过分的,除非您想提升到一个新的水平,否则IMO。
就是这样!如果还有其他事情要讨论,请随时发表评论,如果我错过了任何事情,请告诉我,以便我可以相应地更新。
直到下一篇文章! :)