给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例:
输入: s = “abcdefg”, k = 2 输出: “bacdfeg”
1 2 3 4 5 6 7 8 9 10
var reverseStr = function (s, k) { const len = s.length; let resArr = s.split(""); console.log(resArr) for (let i = 0; i < len; i += 2 * k) { // 每隔 2k 个字符的前 k 个字符进行反转 let l = i - 1, r = i + k > len ? len : i + k; while (++l < --r) [resArr[l], resArr[r]] = [resArr[r], resArr[l]]; } return resArr.join(""); };
示例 3: 输入: “a good example” 输出: “example good a” 解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
var reverseWords = function (s) { let wordArray = s.split(" ") for (let i = 0; i < wordArray.length; i++) { if (wordArray[i] == '') { wordArray.splice(i, 1) i-- } }
for (let i = 0; i < Math.floor(wordArray.length / 2); i++) { let temp = wordArray[i] wordArray[i] = wordArray[wordArray.length - 1 - i] wordArray[wordArray.length - 1 - i] = temp } console.log(wordArray) let word= wordArray.join(" ") return word };