We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent c89b611 commit e495975Copy full SHA for e495975
daily/2019-08-16.md
@@ -4,25 +4,27 @@
4
5
* 时间:2019-08-16
6
* 题目链接:无
7
-* tag:Map
+* tag:`Map`
8
## 题目描述
9
```
10
求一个字符串首尾相等的最长子串,例如abcba,最长就是abcba
11
12
## 参考答案
13
思路:
14
->
+
15
头尾两个字母相同的子串,比如abca,这里头尾相同的就是a..a子串,它的长度就是这两个a的下标之差+1;
16
17
如果是abcadefa,这里有三个a,那么这个子串的长度是第一个a和最后一个a的下标之差+1;
18
19
这时候规律就来了,那我只要计算同一个字母第一次出现和最后一次出现的位置就好了嘛,最后再求个最大值;
20
21
那这样的话,我们只要一次遍历,用一个map把这些位置记下来即可。
22
23
但是仔细想想,我存同一个字母的这么多位置,好像最后我也只取这个位置集合的第一个和最后一个啊,那我为什么还要存这么多,存起始位置就好了嘛!
24
每次遍历到第2,3,4个相同字母的时候,我都减去第一个此字母位置的下标再看看这个差值是不是最大的。
25
所以代码来了:
26
27
+JavaScript Code:
28
```js
29
var LES = function (str) {
30
var map = {}; // 用来存储遍历到的字母出现的第一个位置
0 commit comments