Series

1. Readme

系列

给定一串数字,输出所有连续的n长度顺序子串。

例如,字符串”49142”长度为3的子串系列:

  • “491”
  • “914”
  • “142”

以下长度为 4 的 系列:

  • “4914”
  • “9142”

如果你要求一个 5 位数字,长度为 6 的系列,你应该得到原数字。

请注意,这些系列只需要在输入中是相邻的位置; 数字不需要在数字上连续.

资源

Project Euler 中,问题 8 的一个子集http://projecteuler.net/problem=8

2. 开始你的表演

pub fn series(digits: &str, len: usize) -> Vec<String> {
   unimplemented!(
       "What are the series of length {} in string {:?}",
       len,
       digits
   )
}

3. 测试代码查看


# #![allow(unused_variables)]
#fn main() {
#[test]
fn test_with_zero_length() {
   let expected = vec!["".to_string(); 6];
   assert_eq!(series("92017", 0), expected);
}

#[test]
//#[ignore]
fn test_with_length_2() {
   let expected = vec![
       "92".to_string(),
       "20".to_string(),
       "01".to_string(),
       "17".to_string(),
   ];
   assert_eq!(series("92017", 2), expected);
}

#[test]
//#[ignore]
fn test_with_numbers_length() {
   let expected = vec!["92017".to_string()];
   assert_eq!(series("92017", 5), expected);
}

#[test]
//#[ignore]
fn test_too_long() {
   let expected: Vec<String> = vec![];
   assert_eq!(series("92017", 6), expected);
}

#}

4. 答案


# #![allow(unused_variables)]
#fn main() {
pub fn series(digits: &str, len: usize) -> Vec<String> {
   match len {
       0 => vec!["".to_string(); digits.len() + 1],
       _ => digits
           .chars()
           .collect::<Vec<char>>()
           .windows(len)
           .map(|window| window.into_iter().collect::<String>())
           .collect::<Vec<String>>(),
   }
}

#}



填充/相关