leetcode几道算法题

字符串

反转字符串

1
2
3
4
5
6
7
export default (str) => {
let arr = str.split(' ')
let result = arr.map((item) => {
return item.split('').reverse().join()
})
return result.join(' ')
}

344.反转字符串

1
2
3
4
5
6
7
8
9
10
11
// hello
// olleh
export default (str) => {
const n = str.length
let left = 0
let right = n - 1
for (lft, right; left < right; left++, right--) {
;[str[left], str[right]] = [str[right], str[left]]
}
return str
}

541.反转字符串 II

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 输入:s = "abcdefg", k = 2
// 输出:"bacdfeg"

const reverseStr = (s) => {
const n = s.length
const arr = Array.from(s)
for (let i = 0; i < n; i += 2 * k) {
reverse(arr, i, Math.min(i + k, n) - 1)
}
return arr.join('')
}

const reverse = (arr, left, right) => {
while (left < right) {
const temp = arr[left]
arr[left] = arr[right]
arr[right] = temp
left++
right--
}
}

剑指 offer58 左旋转字符串

1
2
3
4
// 左旋转字符串  abcdefg, 2   abcdefg -> cdefgab
const reverseLeftWords = function (s, n) {
return s.slice(n) + s.slice(0, n)
}

345.反转字符串中的元音字母

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
const reverseVowels = function (s) {
// 拿到字符串的长度
const n = s.length
// 生成一个数组根据字符串
const arr = Array.from(s)
// 定义一左一右两个指针
let i = 0,
j = n - 1
// 进入循环
while (i < j) {
// 如果左边的指针小于字符串的长度,并且当前的元素不是元音字母
while (i < n && !isVowel(arr[i])) {
// 指针继续向前
++i
}
// 如果右边的指针大于0并且当前元素不是元音字母
while (j > 0 && !isVowel(arr[j])) {
// 指针继续向左
--j
}
// 如果左指针小于右指针,说明还没遍历结束
if (i < j) {
// 交换他们此时的元音字母
swap(arr, i, j)
// 左侧指针继续向右
++i
// 右侧指针继续向前
--j
}
}
return arr.join('')
}
// 判断是否为元音字母
function isVowel(char) {
return /^[aeiouAEIOU]$/i.test(char)
}

// 交换数组元素的函数
function swap(arr, index1, index2) {
var temp = arr[index1]
arr[index1] = arr[index2]
arr[index2] = temp
return arr
}

14.最长公共前缀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* @param {string[]} strs
* @return {string}
*/
var longestCommonPrefix = function (strs) {
if (strs.length === 0 || strs === null) return ''

let prefix = strs[0]

for (let i = 0; i < prefix.length; i++) {
let c = prefix.charAt(i)
for (let j = 0; j < strs.length; j++) {
if (i === prefix.length || strs[j].charAt(i) !== c) {
return prefix.substring(0, i)
}
}
}

return prefix
}