読者です 読者をやめる 読者になる 読者になる

連続する文字列の中で長さ最大のものを選ぶ in Rust

codewarsより。

入力として、文字列の配列と整数kが与えられる。配列中のk個の連続する文字列を結合し、長さが最大となるものを選びたい。

longest_consec(vec!["zone", "abigail", "theta", "form", "libe", "zas"], 2);
// => "abigailtheta"

文字列配列をstrarr: Vec<&str>として

strarr.window(k).map(|x| x.join("")).collect()

により次の値を得る。

["zoneabigail", "abigailtheta", "thetaform", "formlibe", "libezas"]

この中からmax_by_keyで長さ最大のものを選べばオッケー。

strarr.window(k).map(|x| x.join("")).max_by_key(|x| x.len()).unwrap_or(String::new())

ただしここで問題の制限がかかってくる。最大長の文字列は、最初に見つけたものを選べ、という条件が付いているのだ。max_by_keyを使うと、長さが同じ場合、後の文字列が選ばれる。max_byで条件を指定する必要がある。