[炼手Rust]字符串窗口

109 阅读1分钟

Hi,大家好,这里是炼手Rust专栏,我是xiaoK,今天来看一个小问题:字符串窗口。

AdobeStock_73538912-scaled.jpeg

提问

给定一个字符串,按出现的顺序输出该字符串中长度为 n 的所有连续子串。

例:
input:49142,3
output:[491,914,142]

input:49142,4
output:[4914,9142]

input:49142,6
output:[]

模板:

pub fn series(digits: &str, len: usize) -> Vec<String> { 
}

分析

很简单,如果输入的长度大于本身字符串的长度,那么就返回空序列;如果小于字符串长度,就从左边开始遍历,每次取长度为 n 的子字符串,总共取字符串长度减去 n-1 次。

解决方案

pub fn series(digits: &str, len: usize) -> Vec<String> {
    let mut windows = vec![];
    if len <= digits.len() {
        let times = digits.len() - len;
        for i in 0..=times {
            windows.push((&digits[i..(i+len)]).to_string());
        }
    }
    
    windows
}

Trick

  1. len()方法可以获取字符串长度。
  2. &str类型通过to_string方法把自己变成String类型。