string - 如何查找子字符串在给定字符串中出现的次数(包括连接)?

标签 string algorithm rust

联合我的意思是:

let substring = "CNC";
和字符串:
let s = "CNCNC";
在我的版本中,“jointed”意味着有 2存在这样的子串。
Rust 中这样做的最佳方法是什么? ?我能想到一些,但基本上很难看 C .
我有这样的事情:
fn find_a_string(s: &String, sub_string: &String) -> u32 {
    s.matches(sub_string).count() as u32
}
但这会返回 1 , 因为 matches() 只发现脱节 substrings .
在 Rust 中做到这一点的最佳方法是什么?

最佳答案

可能有更好的算法。在这里,我只是在输入字符串上移动一个具有我们正在寻找的子字符串大小的窗口,并比较该窗口是否与子字符串相同。

fn main() {
    let string = "aaaa";
    let substring = "aa";

    let substrings = string
        .as_bytes()
        .windows(substring.len())
        .filter(|&w| w == substring.as_bytes())
        .count();

    println!("{}", substrings);
}

关于string - 如何查找子字符串在给定字符串中出现的次数(包括连接)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68969285/

相关文章:

c++ - 如何合并 2 个部分排序的数组?

methods - "too many parameters"完美功能

types - 如何修复 "implicitly returns '()' as its body has no tail or ' return'表达式?

C# Linq - 如果输入不等于任何字符串 []

java - 在循环中为字符串变量赋值的有效方法

java - 字符串中的特殊字符#

enums - Rust-将特征包装在枚举中以用于内存布局和更简单的泛型?

C 对齐特定用例的字符串文字

algorithm - 网络流量流通

java - 算法,从包含 n 个元素的列表中查找组合