344.反转字符串
题目链接:. - 力扣(LeetCode)
这道题的思路就是用双指针法,从字符串两边不断移动左右两个指针,并进行交换;
var reverseString = function (s) {
let left = 0,
right = s.length - 1;
while (left < right) {
[s[left], s[right]] = [s[right], s[left]];
left = left + 1;
right = right - 1;
}
return s;
};
541. 反转字符串II
题目链接: . - 力扣(LeetCode)
和上面的题思路类似,也是用双指针,区别是要注意边界条件
// js中字符串是不可变的,所以需要转换成数组进行操作
s = s.split("");
// 每2k翻转前k个字符
for (let start = 0; start < s.length; start = start + 2 * k) {
let left = start,
right = start + k - 1;
if (right > s.length) right = s.length - 1;
while (left < right) {
let temp = s[left];
s[left] = s[right];
s[right] = temp;
left = left + 1;
right = right - 1;
}
}
return s.join("");
卡码网:54.替换数字
题目链接:54. 替换数字(第八期模拟笔试)
这个先用循环的方式将数字替换,这个用到了ACM模式,先熟悉了ACM模式的代码,以下是JS(Node)的方式
function replaceletter(s) {
let result = '';
for (let i = 0; i < s.length; i++) {
if (!isNaN(s[i])) { // 检查字符是否是数字
result += 'number';
} else {
result += s[i];
}
}
return result
}
var readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let current = ''
rl.on('line', function(line){
//line为输入的单行字符串,split函数--通过空格将该行数据转换为数组。
current = line
console.log(replaceletter(current))
});
151.翻转字符串里的单词
题目链接:. - 力扣(LeetCode)
这道题采用 1.去除多余空格 2. 反转整个字符串 3.反转单个单词的方式,将双指针方法又复习了一遍去除重复元素,这里结尾的逻辑要想清楚
function removeUnusedSpace(arr) {
let left = 0, right = 0;
// 这里用 while,条件判断后 left + 1
while(left < arr.length) {
if (arr[left] === ' ' && (left === 0 || arr[left - 1] === arr[left])) {
left = left + 1
} else {
arr[right] = arr[left]
right = right + 1
left = left + 1
}
}
console.log(arr)
// 这里应该是去处理 right 当前到达的地方,而不是当前数组最后 ,因为后面的都是末尾空格的情况
// 判断和 left 前一个字符相等都是‘ ’ 的时候已经 left + 1了
// 之前最后一次循环 right+1了,如果这个是空格,那么只取到 right
arr.length = arr[right - 1] === ' ' ? right - 1 : right;
return arr
}
function reverseAllWords(arr) {
let left = 0, right = arr.length - 1
while (left < right) {
[arr[left], arr[right]] = [arr[right], arr[left]]
left = left + 1;
right = right - 1
}
return arr
}
function reverseWord(arr, left, right) {
while (left < right) {
[arr[left], arr[right]] = [arr[right], arr[left]]
left = left + 1;
right = right - 1
}
return arr
}
var reverseWords = function (s) {
const sArr = s.split('')
const newArr = removeUnusedSpace(sArr)
let reversedArr = reverseAllWords(newArr)
let left = 0, right = 0;
for(; right < s.length; right = right + 1) {
if(!reversedArr[right + 1] === ' ' && right !== s.length - 2) continue
if(reversedArr[right + 1] === ' ' || right === s.length - 1) {
reversedArr = reverseWord(reversedArr, left, right)
left = right + 2
}
}
return reversedArr.join('')
};