Rust with iterators
Code\nRust []\nimpl Solution {\n    pub fn can_change(start: String, target: String) -> bool {\n        let mut iter1 = Self::pieces(&start);\n        let mut i
# Code\n```Rust []\nimpl Solution {\n    pub fn can_change(start: String, target: String) -> bool {\n        let mut iter1 = Self::pieces(&start);\n        let mut iter2 = Self::pieces(&target);\n        loop {\n            match (iter1.next(), iter2.next()) {\n                (None, None) => return true,\n                (Some((i, b1)), Some((j, b2))) => {\n                    if b1 != b2\n                    || (b1 == b\'L\' && i < j)\n                    || (b1 == b\'R\' && i > j) {\n                        return false;\n                    }\n                }\n                _ => return false,\n            }\n        }\n    }\n\n    fn pieces<\'a>(s: &\'a String) -> impl Iterator<Item=(usize, u8)> + \'a {\n        s.bytes().enumerate().filter(|&(_, b)| b != b\'_\')\n    }\n}\n```
['Two Pointers', 'Iterator', 'Rust']