【Rust】ベクタ型の要素を右/左にシフトさせる rotate_right / rotate_left
はじめに
RustでB - String Shiftingを解くにあたり,
ベクタ型の要素を右 / 左にシフトさせる方法について調べたので,こちらにメモを残しておきます.
ベクタ型の要素を右 / 左にシフトさせる方法
こちらに記載のあるrotate_left
/ rotate_right
メソッドを使用することで,ベクタ型の要素を左右に移動させることができます.
let mut a = ['a', 'b', 'c', 'd', 'e', 'f']; a.rotate_left(2); assert_eq!(a, ['c', 'd', 'e', 'f', 'a', 'b']);
また,ベクタ型の一部をシフトさせることも可能です.
let mut a = ['a', 'b', 'c', 'd', 'e', 'f']; a[1..5].rotate_left(1); assert_eq!(a, ['a', 'c', 'd', 'e', 'b', 'f']);
B - String Shiftingの解法
与えられた文字列を 0 ~ (n - 1)回シフトさせたもの全列挙して,別のベクタに保持しておき,ソートして最小と最大を取り出せば良いです.
use proconio::{ input, marker::{Bytes, Chars}, }; fn main() { input! { mut s: Chars, }; let mut v = vec![]; for _ in 0..s.len() { v.push(s.clone()); s.rotate_right(1); } v.sort(); println!("{}", v[0].iter().collect::<String>()); println!("{}", v[v.len() - 1].iter().collect::<String>()); }
参考
リンク