Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

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)