pub trait SequenceExt<T> {
// Required methods
fn is_palindrome<R: RangeBounds<usize>>(&self, range: R) -> bool
where T: Eq;
fn reverse_range<R: RangeBounds<usize>>(&mut self, range: R);
fn rotate_left_range<R: RangeBounds<usize>>(&mut self, range: R, k: usize);
fn rotate_right_range<R: RangeBounds<usize>>(&mut self, range: R, k: usize);
}Expand description
列の任意区間に対する操作を提供します。
[T] に実装されているため、Vec<T> や配列のスライスに対して利用できます。
範囲引数は RangeBounds に従い、.., l.., ..r, l..r, l..=r などを指定できます。
範囲は半開区間 [start, end) として扱われます。添字は0始まりで、変換後の範囲が
0 <= start <= end <= self.len() を満たさない場合は panic します。
Required Methods§
Sourcefn is_palindrome<R: RangeBounds<usize>>(&self, range: R) -> boolwhere
T: Eq,
fn is_palindrome<R: RangeBounds<usize>>(&self, range: R) -> boolwhere
T: Eq,
range で指定した区間が回文かどうかを返します。
範囲内の要素を先頭と末尾から順に比較します。空区間と1要素の区間は回文です。
計算量は区間長を L として O(L)、追加メモリは O(1) です。
§Examples
use atcoder::string::SequenceExt;
let a = vec![1, 2, 3, 2, 1];
assert!(a.is_palindrome(..));
assert!(a.is_palindrome(1..4));
assert!(a.is_palindrome(2..3));
assert!(!a.is_palindrome(0..4));Sourcefn reverse_range<R: RangeBounds<usize>>(&mut self, range: R)
fn reverse_range<R: RangeBounds<usize>>(&mut self, range: R)
range で指定した区間の要素順を反転します。
範囲外の要素は変更しません。空区間では何もしません。
計算量は区間長を L として O(L)、追加メモリは O(1) です。
§Examples
use atcoder::string::SequenceExt;
let mut a = vec![1, 2, 3, 4, 5];
a.reverse_range(1..4);
assert_eq!(a, vec![1, 4, 3, 2, 5]);Sourcefn rotate_left_range<R: RangeBounds<usize>>(&mut self, range: R, k: usize)
fn rotate_left_range<R: RangeBounds<usize>>(&mut self, range: R, k: usize)
range で指定した区間を左に k 個巡回シフトします。
k が区間長以上の場合は、区間長で割った余りだけシフトします。たとえば [1, 2, 3] を k = 1
でシフトすると [2, 3, 1] になります。空区間に対して呼び出した場合は何もしません。
計算量は区間長を L として O(L)、追加メモリは O(1) です。
§Examples
use atcoder::string::SequenceExt;
let mut a = vec![1, 2, 3, 4, 5];
a.rotate_left_range(1..5, 2);
assert_eq!(a, vec![1, 4, 5, 2, 3]);Sourcefn rotate_right_range<R: RangeBounds<usize>>(&mut self, range: R, k: usize)
fn rotate_right_range<R: RangeBounds<usize>>(&mut self, range: R, k: usize)
range で指定した区間を右に k 個巡回シフトします。
k が区間長以上の場合は、区間長で割った余りだけシフトします。たとえば [1, 2, 3] を k = 1
でシフトすると [3, 1, 2] になります。空区間に対して呼び出した場合は何もしません。
計算量は区間長を L として O(L)、追加メモリは O(1) です。
§Examples
use atcoder::string::SequenceExt;
let mut a = vec![1, 2, 3, 4, 5];
a.rotate_right_range(1..5, 2);
assert_eq!(a, vec![1, 4, 5, 2, 3]);Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".