Решение на Search от Биляна Добрева

Обратно към всички решения

Към профила на Биляна Добрева

Резултати

  • 15 точки от тестове
  • 0 бонус точки
  • 15 точки общо
  • 5 успешни тест(а)
  • 0 неуспешни тест(а)

Код

pub fn extract_words(text: &str) -> Vec<String> {
let mut v: Vec<String>= Vec::new() ;
let mut ch = text.chars();
while ch.as_str()!=""{
let c= firstletter(ch.as_str());
if c.is_alphabetic() {
let mut s = String::new();
s.push(c);
ch.next();
while firstletter(ch.as_str()).is_alphabetic()&& ch.as_str()!="" {
s.push(firstletter(ch.as_str()));
ch.next();
}

Не би трябвало да ти трябва firstletter. Вместо да правиш цикъл, и да break-ваш веднага, можеш просто да получиш първия символ с w.chars().next(). Нещо такова:

while let Some(c) = ch.next() {
    if c.is_alphabetic() {
      s.push(c);
    }
}

Или нещо такова.

v.push(s.to_string());
}
else {
ch.next();
}
}
return v;
}
pub fn firstletter(w:&str) -> char {
let mut c1=' ';
for c in w.chars() {
c1=c;
break;
}
return c1;
}

Както казах по-горе, не ти трябва firstletter. Но, ако искаш да имплементираш точно това поведение, първия символ или интервал:

w.chars().next().unwrap_or(' ')
use std::collections::HashSet;
pub struct TextIndex {
vec : Vec<String>,
}
impl TextIndex {
pub fn new() -> Self {
TextIndex{vec : Vec::new(),}
}
pub fn push(&mut self, text: &str) {
self.vec.push(text.to_string());
}
pub fn search(&self, query: &str) -> HashSet<&str> {
let mut set = HashSet::new();
let v1: Vec<String>=extract_words(query);
for i in 0..v1.len() {
for j in 0..self.vec.len() {
if self.vec[j].contains(v1[i].as_str()) {
set.insert(self.vec[j].as_str());
}
}
}
return set;
}
}
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
}
}

Лог от изпълнението

Compiling solution v0.1.0 (file:///tmp/d20180105-6053-ucyd3l/solution)
    Finished dev [unoptimized + debuginfo] target(s) in 4.25 secs
     Running target/debug/deps/solution-3f98bfa5c86a5dd9

running 1 test
test tests::it_works ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

     Running target/debug/deps/solution_test-3d9e4ea2eafbbc82

running 5 tests
test solution_test::test_extract_words_basic ... ok
test solution_test::test_extract_words_extra ... ok
test solution_test::test_search_multiple_words ... ok
test solution_test::test_search_special_cases ... ok
test solution_test::test_search_word ... ok

test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

   Doc-tests solution

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

История (1 версия и 2 коментара)

Биляна качи първо решение на 03.01.2018 14:59 (преди над 7 години)