51 lines
1.5 KiB
Rust
51 lines
1.5 KiB
Rust
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']);
|
||
}
|
||
}
|