2024-10-02:用go语言,你可以通过遍历字符串s,找到以字符c开头和结尾的非空子字符串,然后统计它们的数量即可。
输入:s = "abada", c = "a"。
输出:6。
解释:以 "a" 开头和结尾的子字符串有:"abada"、"abada"、"abada"、"abada"、"abada"、"abada"。
答案2024-10-02:
chatgpt
题目来自leetcode3084。
大体步骤如下:
1.创建一个函数 countSubstrings(s string, c byte) int64
用于统计字符串 s
中以字符 c
开头和结尾的非空子字符串的数量。
2.在 countSubstrings
函数中,首先使用 strings.Count(s, string(c))
统计字符串 s
中字符 c
的出现次数,并将结果存储在变量 k
中。
3.然后计算以字符 c
开头和结尾的非空子字符串的数量。这可以通过数学公式计算得出,即首先用 k
乘以 k 1
,再除以 2。
4.在 main
函数中,定义字符串 s = "abada"
和字符 c = 'a'
,然后调用 countSubstrings(s, c)
函数,并输出结果。
5.对于输入示例 s = "abada", c = 'a'
,程序会统计以字符 'a' 开头和结尾的非空子字符串的数量,即 "abada"、"abada"、"abada"、"abada"、"abada"、"abada"。
6.整体时间复杂度取决于 strings.Count()
函数的时间复杂度以及乘法和加法运算的时间复杂度,通常可以视为 O(n),其中 n 为字符串的长度。额外空间复杂度为 O(1)。
Go完整代码如下:
代码语言:javascript复制package main
import(
"fmt"
"strings"
)
func countSubstrings(s string, c byte)int64{
k :=int64(strings.Count(s,string(c)))
return k *(k 1)/2
}
func main(){
s :="abada"
c :=byte('a')
fmt.Println(countSubstrings(s, c))
}
Rust完整代码如下:
代码语言:javascript复制fn count_substrings(s:&str, c:char)->i64{
letk= s.chars().filter(|&ch| ch == c).count()asi64;
k *(k 1)/2
}
fnmain(){
lets="abada";
letc='a';
println!("{}",count_substrings(s, c));
}