my_leetcode/rust/src/implements/q0344.rs

51 lines
1.5 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

use crate::Solution;
impl Solution {
/// 344.反转字符串
///
/// [原题链接](https://leetcode-cn.com/problems/reverse-string/)
///
/// 2021-07-20 22:32:53
///
/// 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 `char[]` 的形式给出。
///
/// 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 `O(1)` 的额外空间解决这一问题。
///
/// 你可以假设数组中的所有字符都是 `ASCII` 码表中的可打印字符。
///
/// + 示例 1
/// - 输入:`["h","e","l","l","o"]`
/// - 输出:`["o","l","l","e","h"]`
/// + 示例 2
/// - 输入:`["H","a","n","n","a","h"]`
/// - 输出:`["h","a","n","n","a","H"]`
///
/// Related Topics 递归 双指针 字符串
///
/// 👍 425 👎 0
pub fn reverse_string(s: &mut Vec<char>) {
let n = s.len();
let mut idx = 0;
for i in 0..n / 2 {
idx = n - i - 1;
s[i] = (s[i] as u8 ^ s[idx] as u8) as char;
s[idx] = (s[i] as u8 ^ s[idx] as u8) as char;
s[i] = (s[i] as u8 ^ s[idx] as u8) as char;
}
}
}
#[cfg(test)]
mod test {
use crate::Solution;
#[test]
fn test_q0344() {
let mut s = vec!['h', 'e', 'l', 'l', 'o'];
Solution::reverse_string(&mut s);
assert_eq!(s, vec!['o', 'l', 'l', 'e', 'h']);
}
}