917.仅仅反转字母
题目链接
仅仅反转字母
思路
- 先将字符串转成数组,然后遍历
- 维护两个指针l,r使l为0,r为数组的最后一位索引
- 当左右指针都为
‘-’
时,左指针向右移动,右指针向左移动并进行转换 - 将数组转成字符串
代码
function reverseOnlyLetters(s: string): string {
const chars = s.split('')
for (let l = 0, r = s.length - 1; l < r;) {
while (l < r && !((chars[l] >= 'a' && chars[l] <= 'z') || (chars[l] >= 'A' && chars[l] <= 'Z')))
l++
while (r > l && !((chars[r] >= 'a' && chars[r] <= 'z') || (chars[r] >= 'A' && chars[r] <= 'Z')))
r--
if (l < r) {
const tmp = chars[l]
chars[l++] = chars[r]
chars[r--] = tmp
}
}
return chars.join("")
};
167. 两数之和 II - 输入有序数组
题目链接
两数之和 II - 输入有序数组
思路
- 创建一个map结构用于记录数字与数字的索引
- 枚举数组,判断target-当前值在不在map中
- 若在返回
- 若不在存入map
代码
function twoSum(numbers: number[], target: number): number[] {
let map = new Map()
for (let i = 0; i < numbers.length; i++) {
let item = numbers[i]
if (map.has(target - item)) {
return [map.get(target - item)+1, i+1]
} else {
map.set(item, i)
}
}
return [-1, -1]
};
165. 比较版本号
题目链接
比较版本号
思路
- 将两个版本号切成数组
- 遍历数组转成number,若越界则定义为0
- 比较当前遍历两个元素大小,根据题目要求返回相应结果
代码
function compareVersion(version1: string, version2: string): number {
const [v1, v2] = [version1.split('.'), version2.split('.')];
const len = Math.max(v1.length, v2.length);
for (let i = 0; i < len; i++) {
const num1 = v1[i] ? parseInt(v1[i]) : 0;
const num2 = v2[i] ? parseInt(v2[i]) : 0;
if (num1 > num2) {
return 1;
} else if (num1 < num2) {
return -1;
}
}
return 0;
};