1.反转字符串
题目描述
解题思路
1.使用双指针,left表示字符串起点,right表示字符串终点
2.交换左右指针的值,左指针递增,右指针递减
3.循环结束条件left < right
var reverseString = function(s) {
let left = 0;
let right = s.length - 1
while(left < right) {
[s[right],s[left]] = [s[left],s[right]]
left++;
right --
}
return s
};
2.反转字符串II
题目描述
解题思路
1.本题解题思路和反转字符串相同,只需在外面再套一层for循环,使i+=2*k
2.需要注意的是本题给的是字符串,不是数组,需要将字符串分成数组再操作。
var reverseStr = function(s, k) {
const len = s.length;
let resArr = s.split("");
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("");
};
题目描述
解题思路
1.本题最简单的思路就是循环遍历,遇到空格就替换成%20
2.还有就是先统计字符串中空格的数量,再将字符串扩容
3.使用双指针,一个指针指向扩容后的位置,一个指向扩容前的位置
4.将扩容前的值赋值给扩容后的值,遇到空格直接连赋值3个字符 ‘%’ ‘2’ '0,需要从后往前遍历
var replaceSpace = function(s) {
s = s.split('')
let count = 0;
for (let i = 0; i < s.length; i++) {
if (s[i] === " ") {
count++;
}
}
const oldLength = s.length;
s.length = oldLength + count*2
const newLength = s.length;
for (let i = oldLength - 1, j = newLength - 1; i < j; i--, j--) {
if (s[i] !== " ") {
s[j] = s[i];
} else {
s[j] = "0";
s[j - 1] = "2";
s[j - 2] = "%";
j = j - 2;
}
}
return s.join('');
};
题目描述
解题思路
1.本题直接在原字符串上操作。
2.移除字符串前后多余空格
3.将字符串反转
4.再将字符串里的单词反转,就实现了反转字符串中的单词。
var reverseWords = function(s) {
const strArr = Array.from(s)
removeExtraSpaces(strArr)
reverse(strArr, 0, strArr.length - 1);
let start = 0;
for(let i =0;i<=strArr.length;i++){
if(strArr[i] === ' ' || i === strArr.length){
reverse(strArr,start,i-1)
start=i+1
}
}
return strArr.join('');
};
function reverse(strArr,start,end){
let left = start,right = end;
while(left<right){
[strArr[left],strArr[right]] = [strArr[right],strArr[left]]
left++;
right--
}
}
function removeExtraSpaces(strArr){
let slowIndex = 0,fastIndex =0;
while(fastIndex<strArr.length){
if(strArr[fastIndex] === ' ' && (fastIndex === 0 || strArr[fastIndex - 1] === ' ')){
// 移除非首位多余空格
fastIndex++
} else {
strArr[slowIndex++] = strArr[fastIndex++]
}
}
strArr.length = strArr[slowIndex - 1] === ' '? slowIndex-1:slowIndex //移除末尾空格
}
5.左旋转字符串
题目描述
解题思路
1.反转字符串前n位字母
2.反转从n到结尾的字符串
3.反转整个字符串
var reverseLeftWords = function(s, n) {
const strArr = s.split('')
reverse(strArr,0,n-1)
reverse(strArr,n,strArr.length)
reverse(strArr,0,strArr.length)
return strArr.join('')
};
var reverse = function(strArr,start,end){
let left = start,right=end
while(left < right){
[strArr[left],strArr[right]] =[strArr[right],strArr[left]]
left++
right--
}
}