Skip to content

Commit e495975

Browse files
authored
Update 2019-08-16.md
1 parent c89b611 commit e495975

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

daily/2019-08-16.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,27 @@
44

55
* 时间:2019-08-16
66
* 题目链接:无
7-
* tag:Map
7+
* tag:`Map`
88
## 题目描述
99
```
1010
求一个字符串首尾相等的最长子串,例如abcba,最长就是abcba
1111
```
1212
## 参考答案
1313
思路:
14-
>
14+
1515
头尾两个字母相同的子串,比如abca,这里头尾相同的就是a..a子串,它的长度就是这两个a的下标之差+1;
16-
>
16+
1717
如果是abcadefa,这里有三个a,那么这个子串的长度是第一个a和最后一个a的下标之差+1;
18-
>
18+
1919
这时候规律就来了,那我只要计算同一个字母第一次出现和最后一次出现的位置就好了嘛,最后再求个最大值;
20-
>
20+
2121
那这样的话,我们只要一次遍历,用一个map把这些位置记下来即可。
22-
>
22+
2323
但是仔细想想,我存同一个字母的这么多位置,好像最后我也只取这个位置集合的第一个和最后一个啊,那我为什么还要存这么多,存起始位置就好了嘛!
2424
每次遍历到第2,3,4个相同字母的时候,我都减去第一个此字母位置的下标再看看这个差值是不是最大的。
2525
所以代码来了:
26+
27+
JavaScript Code:
2628
```js
2729
var LES = function (str) {
2830
var map = {}; // 用来存储遍历到的字母出现的第一个位置

0 commit comments

Comments
 (0)