Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a6d0a00

Browse files
committed
docs: 新增No.14题解
1 parent d0fff1a commit a6d0a00

File tree

3 files changed

+199
-1
lines changed

3 files changed

+199
-1
lines changed

‎leetcode刷题/README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
- [No.1 两数之和](https://github.com/Mayandev/javascript_algorithm/blob/master/leetcode%E5%88%B7%E9%A2%98/note/No1_two-sum.md)
44
- [No.7 整数反转](https://github.com/Mayandev/javascript_algorithm/blob/master/leetcode%E5%88%B7%E9%A2%98/note/No7_reverse.md)
5+
- [No.8 字符串转换整数 (atoi)](https://github.com/Mayandev/javascript_algorithm/blob/master/leetcode%E5%88%B7%E9%A2%98/note/No8_my-atoi.md)
6+
- [No.14 最长公共前缀](https://github.com/Mayandev/javascript_algorithm/blob/master/leetcode%E5%88%B7%E9%A2%98/note/No14_longest-common-prefix.md)
57
- [No.19 删除链表倒数第 n 个节点](https://github.com/Mayandev/javascript_algorithm/blob/master/leetcode%E5%88%B7%E9%A2%98/note/No19_remove-nth-from-end.md)
68
- [No.21 合并两个有序链表](https://github.com/Mayandev/javascript_algorithm/blob/master/leetcode%E5%88%B7%E9%A2%98/note/No21_merge-two-lists.md)
79
- [No.26 从排序数组中删除重复项](https://github.com/Mayandev/javascript_algorithm/blob/master/leetcode%E5%88%B7%E9%A2%98/note/No26_remove-duplicates.md)
@@ -20,7 +22,7 @@
2022
- [No.283 移动零](https://github.com/Mayandev/javascript_algorithm/blob/master/leetcode%E5%88%B7%E9%A2%98/note/No283_move-zeroes.md)
2123
- [No.350 两个数组的交集 II](https://github.com/Mayandev/javascript_algorithm/blob/master/leetcode%E5%88%B7%E9%A2%98/note/No350_intersect.md)
2224
- [No.387 字符串中的第一个唯一字符](https://github.com/Mayandev/javascript_algorithm/blob/master/leetcode%E5%88%B7%E9%A2%98/note/No387_first-uniq-char.md)
23-
26
25+
2426

2527
## 分类
2628

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
# No.14 最长公共前缀
2+
3+
难度: `easy`
4+
5+
编写一个函数来查找字符串数组中的最长公共前缀。
6+
7+
如果不存在公共前缀,返回空字符串 ""。
8+
9+
## 示例
10+
11+
示例 1:
12+
13+
```
14+
输入: ["flower","flow","flight"]
15+
输出: "fl"
16+
```
17+
18+
示例 2:
19+
20+
```
21+
输入: ["dog","racecar","car"]
22+
输出: ""
23+
解释: 输入不存在公共前缀。
24+
25+
```
26+
27+
说明:
28+
29+
所有输入只包含小写字母 a-z 。
30+
31+
## 解题思路
32+
33+
34+
**解题思路1:**
35+
36+
首先用一种很简单方法去解。
37+
38+
- 找到最短的子串
39+
- 然后将子串的长度从最长到最短暴力匹配出来
40+
41+
代码如下:
42+
43+
```javascript
44+
45+
/**
46+
* @param {string[]} strs
47+
* @return {string}
48+
*/
49+
var longestCommonPrefix = function(strs) {
50+
let n = strs.length;
51+
if (n == 0) {
52+
return "";
53+
}
54+
let minSubStrIdx = 0;
55+
let minLength=strs[0].length;
56+
for (let i = 1; i < n; i++) {
57+
if (strs[i].length < minLength) {
58+
minLength = strs[i].length;
59+
}
60+
}
61+
62+
let returnStr = [];
63+
for (let i = 0; i < minLength; i++) {
64+
let stack = [strs[0][i]];
65+
for (let j = 1; j < n; j++) {
66+
67+
if (stack[stack.length-1] == strs[j][i]) {
68+
stack.push(strs[j][i]);
69+
} else {
70+
break;
71+
}
72+
}
73+
if (stack.length != n) {
74+
break;
75+
} else {
76+
returnStr.push(stack[0]);
77+
}
78+
}
79+
console.log(returnStr);
80+
return returnStr.join('');
81+
};
82+
```
83+
84+
**解题思路2:**
85+
86+
这是一个官方题解,思路非常的巧妙。
87+
88+
算法首先去第一个字符串为最长公共前缀,然后一次比较后面的字符,使用indexOf()函数,如果后面的字符包含公共前缀,则跳到下一个循环。
89+
90+
以示例 1 为例:
91+
92+
```
93+
输入: ["flower","flow","flight"]
94+
输出: "fl"
95+
```
96+
97+
首先假设 prefix = 'flower',然后使用indexOf()比较后一个字符串,
98+
99+
如果后一个字符串存在 prefix,则跳到下一个循环。
100+
101+
如果不存在 prefix,则使用 substring 将字符串切割,长度减少1。
102+
103+
代码如下:
104+
105+
```javascript
106+
/**
107+
* @param {string[]} strs
108+
* @return {string}
109+
*/
110+
var longestCommonPrefix = function(strs) {
111+
if (strs.length == 0) return "";
112+
let prefix = strs[0];
113+
for (let i = 1; i < strs.length; i++)
114+
while (strs[i].indexOf(prefix) != 0) {
115+
prefix = prefix.substring(0, prefix.length - 1);
116+
if (prefix.length == 0) return "";
117+
}
118+
return prefix;
119+
};
120+
```

‎leetcode刷题/note/No8_my-atoi.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# No.8 字符串转换整数 (atoi)
2+
3+
请你来实现一个 atoi 函数,使其能将字符串转换成整数。
4+
5+
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
6+
7+
当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
8+
9+
该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。
10+
11+
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。
12+
13+
在任何情况下,若函数不能进行有效的转换时,请返回 0。
14+
15+
说明:
16+
17+
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
18+
19+
示例 1:
20+
21+
```
22+
输入: "42"
23+
输出: 42
24+
```
25+
26+
示例 2:
27+
```
28+
输入: " -42"
29+
输出: -42
30+
解释: 第一个非空白字符为 '-', 它是一个负号。
31+
我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
32+
```
33+
34+
示例 3:
35+
```
36+
输入: "4193 with words"
37+
输出: 4193
38+
解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。
39+
```
40+
41+
42+
示例 4:
43+
44+
```
45+
输入: "words and 987"
46+
输出: 0
47+
解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
48+
因此无法执行有效的转换。
49+
```
50+
51+
示例 5:
52+
53+
```
54+
输入: "-91283472332"
55+
输出: -2147483648
56+
解释: 数字 "-91283472332" 超过 32 位有符号整数范围。
57+
因此返回 INT_MIN (−231) 。
58+
```
59+
60+
## 解题思路
61+
62+
面对这么多条件,直接使用正则表达式来解决。
63+
64+
65+
代码如下:
66+
67+
```javascript
68+
var myAtoi = function(str) {
69+
let reg = new RegExp(/^\s*[+|-]?\d+/g);
70+
71+
if(reg.test(str) == false){return 0}
72+
let num = str.match(reg)[0];
73+
74+
return Math.max( Math.min(num, Math.pow(2, 31) - 1), Math.pow(-2, 31));
75+
};
76+
```

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /