📅  最后修改于: 2023-12-03 15:12:40.665000             🧑  作者: Mango
本问题考查了应用Java编程语言解决问题的能力。下面是题目描述:
给定一个字符串S和一个字符C。该字符串包含多个以数字表示的子字符串,以C作为分隔符。例如,字符串“1,2,4,7,11+12+15-18”包含五个子字符串:“1”,“2”,“4”,“7”和“11+12+15-18”。 编写一个Java函数,该函数接受S和C两个参数,并返回字符串S中包含数字的子字符串的总数。例如在上面的示例中,函数将返回5。 在你的实现中,你应该避免使用内置的Java函数库。
首先,我们可以使用两个指针 start
和 end
来遍历字符串 S。然后,我们检查 S[end] 是否等于 C 或 end 是否等于 S 的长度。如果是,则表示我们已经到达了字符串 S 中的子字符串的末尾,此时我们可以提取并计数该子字符串,然后将 start
和 end
指针移到下一个子字符串的开头。
public static int countSubstrings(String s, char c) {
int start = 0, end = 0, count = 0;
while (end <= s.length()) {
if (end == s.length() || s.charAt(end) == c) {
String subStr = s.substring(start, end);
// 判断子字符串是否为数字
if (!subStr.isEmpty() && isNumber(subStr)) {
count++;
}
start = end + 1;
}
end++;
}
return count;
}
static boolean isNumber(String str) {
for (char c : str.toCharArray()) {
if (!Character.isDigit(c)) {
return false;
}
}
return true;
}
下面是一些测试样例,以保证我们的实现是正确的:
| S | C | 预期的计数器值 | |-----------------------|---|-----------------| | 1,2,4,7,11+12+15-18 | , | 5 | | 123 | , | 1 | | 1,2,3 | + | 3 | | a,b,c,d,e | , | 0 | | | ; | 0 |
本题要求我们使用 Java 编写一个函数,该函数接受字符串 S
和字符 C
两个参数,并计算字符串 S
中包含数字的子字符串数目。我们可以使用两个指针 start
和 end
遍历字符串,然后提取并计数每个数字子字符串。注意,我们需要处理传入空字符串或无法找到分隔符的情况。