双指针

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 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”]


双指针 Two Pointers

可以发现代码逻辑和我们提到的反向指针套路完全一致,头尾为双指针的初始位置,根据题目要求,不断调换i, j指向的元素,每次循环后,i向右移动,j向左移动,直到两指针相遇即可。
TIM截图20200518232849-3.webp
Java 实现:

  1. public char[] reverseString(char[] str) {
  2. // initialize
  3. int i = 0; j = str.length - 1;
  4. // two pointers opposite direction
  5. while (i < j) {
  6. // swap str[i] and str[j]
  7. char tmp = str[i];
  8. str[i] = str[j];
  9. str[j] = tmp;
  10. i++;
  11. j--;
  12. }
  13. return str;
  14. }