1、给定字符串 s 和 t ,判断 s 是否为 t 的子序列
var isSubsequence = function(s, t) {
let i = 0;
let j = 0
while (i < s.length && j < t.length) {
if (s[i] === t[j]) {
i++;
}
j++;
}
return i === s.length;
};
console.log("isSubsequence", isSubsequence("abc", "ahbgdc"))
2、反转单词前缀
var reversePrefix = function(word, ch) {
var word = word.split("");
let arr = []
let str = ""
for(i=0; i< word.length; i++){
arr.push(word[i])
if(word[i] === ch && word.indexOf(ch) == i){
str = arr.reverse("").join("")
arr = []
}
}
return str + arr.join("")
};
3、给一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
function generateMatrix(n) {
// 创建一个 n x n 的矩阵
const matrix = new Array(n).fill(0).map(() => new Array(n).fill(0));
let num = 1; // 当前要填充的数字
let top = 0; // 上边界
let bottom = n - 1; // 下边界
let left = 0; // 左边界
let right = n - 1; // 右边界
while (num <= n * n) {
// 从左到右填充上边界
for (let i = left; i <= right; i++) {
matrix[top][i] = num;
num++;
}
top++;
// 从上到下填充右边界
for (let i = top; i <= bottom; i++) {
matrix[i][right] = num;
num++;
}
right--;
// 从右到左填充下边界
for (let i = right; i >= left; i--) {
matrix[bottom][i] = num;
num++;
}
bottom--;
// 从下到上填充左边界
for (let i = bottom; i >= top; i--) {
matrix[i][left] = num;
num++;
}
left++;
}
return matrix;
}
// 示例用法
const n = 3;
const matrix = generateMatrix(n);
console.log(matrix);
4、给一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
function reverseLinkedList(pHead) {
let prev = null;
let current = pHead;
while (current !== null) {
let next = current.next;
current.next = prev;
prev = current;
current = next;
}
return prev;
}
5、将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转
class ListNode {
constructor(val) {
this.val = val;
this.next = null;
}
}
function reverseBetween(head, m, n) {
if (!head || m === n) {
return head;
}
let dummy = new ListNode(0);
dummy.next = head;
let prev = dummy;
for (let i = 0; i < m - 1; i++) {
prev = prev.next;
}
let start = prev.next;
let then = start.next;
for (let i = 0; i < n - m; i++) {
start.next = then.next;
then.next = prev.next;
prev.next = then;
then = start.next;
}
return dummy.next;
}
// 示例用法
const head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
const m = 2;
const n = 4;
const reversedList = reverseBetween(head, m, n);
// 打印反转后的链表
let current = reversedList;
while (current) {
console.log(current.val);
current = current.next;
}