网络异常,图片无法展示
|
网络异常,图片无法展示
|
反转字符串
题目
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例 1: 输入:["h","e","l","l","o"] 输出:["o","l","l","e","h"]
题解
思路一:
找到中间点,设定中间点的左右两边位置为左右指针,分别向两边扩散交换。
中间点需要根据数组长度的奇偶来判断。偶数,左右指针就指向长度一半的前一个位置和一半的位置;奇数,左右指针分别指向中间数的左右两边的位置。
网络异常,图片无法展示
|
设定左右指针,分别指向头和尾。两个指针相向而行,互相交换,当左右指针相遇或左指针超过右指针时,跳出循环,返回数组。
网络异常,图片无法展示
|
代码
思路一:
var reverseString = function (s) { let l, r if (s.length % 2 === 0) { l = (s.length >> 1) - 1 r = s.length >> 1 } else { l = (s.length >> 1) - 1 r = (s.length >> 1) + 1 } while (l >= 0 && r < s.length) { swap(s, l--, r++) } return s }; function swap(arr, i, j) { let temp = arr[i] arr[i] = arr[j] arr[j] = temp }
思路二:
var reverseString = function (s) { let l = 0, r = s.length - 1 while (l < r) { swap(s, l++, r--) } return s }; function swap(arr, i, j) { let temp = arr[i] arr[i] = arr[j] arr[j] = temp } 复制代码
反转字符串中的单词III
题目
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例: 输入:"Let's take LeetCode contest" 输出:"s'teL ekat edoCteeL tsetnoc"
题解
这题主要考察字符串与数组之间切换,还有数组的反转。
先将字符串按空格分割成数组,然后在每个小段字符串中,将其变成数组反转,在拼成字符串。最后用空格将其再拼接成一个长的字符串。
代码
var reverseWords = function (s) { let arr = s.split(' ') let res = [] for (let i = 0; i < arr.length; i++) { res.push(arr[i].split('').reverse().join('')) } return res.join(' ') };
题目来源:leetcode