ARTS打卡第三周 - Keep Moving

Algorithm

算法题

1
2
3
4
5
6
7
8
9
10
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

> 示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

> 示例 2:
输入: "cbbd"
输出: "bb"

首先还是暴力破解(找出所有的字符串记录长度并判断是不是回文,这里就不讲了,面试的时候还是可以先讲,套路一下面试官,呵呵),下面先分析:

1
2
3
4
5
假如字符串为空或者长度为1,那么输出就是它本身

假如字符串长度是2,除非是两个相同的字符

回文数字肯定是两边相等,从中间发散,所以依次从中间位置像两端发散求最长子串。

时间复杂度O(n^2),空间复杂度为O(1), Talk is cheap, Show me the code.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class Solution {
public String longestPalindrome(String s) {
if (s == null || s.length() <= 1){
return s;
}
char[] chars = s.toCharArray();
Integer[] left = process(chars, true);
Integer[] right = process(chars, false);
if (left[1] - left[0] > right[1] - right[0]) {
return s.substring(left[0], left[1]+1);
} else {
return s.substring(right[0], right[1]+1);
}
}

private static Integer[] process(char[] chars, boolean left) {
int min = 0;
int max = 0;
int len = 0;
int index = chars.length / 2;
while (index >= 0 && index <= chars.length - 1) {
int l = 1;
int p = index - 1;
int q = index + 1;
while (p >= 0 && chars[index] == chars[p]) {
p--;
l++;
}
while (q <= chars.length - 1 && chars[index] == chars[q]) {
q++;
l++;
}
while (p >= 0 && q <= chars.length - 1) {
if (chars[p] != chars[q]) {
break;
}
p--;
q++;
l += 2;
}
if (l > len) {
max = q - 1;
min = p + 1;
len = l;
}
index = left ? index - 1 : index + 1;
}
return new Integer[]{min, max};
}
}

Review

HTTP/2 Frequently Asked Questions

本周Review了HTTP2的常见问题,文章具体介绍了一些问题:

  • 常规问题
    • 为什么要修改HTTP?
    • 谁提出的HTTP/2?
    • HTTP/2与SPDY有什么关系?
    • HTTP/2与HTTP/1.x的区别?
    • HTTP/2为什么使用多路复用?
    • 服务器推送的好处?
    • HTTP/2如何提高安全性?
    • HTTP/2会取代HTTP/1.x吗?
  • 实施问题
    • HPACK状态的最小或最大大小是多少
    • 为什么只有一个压缩/流控制上下文?
    • HTTP/2连接是否需要TCP_NODELAY
    • 是否可以在不实现HTTP/1.1的情况下实现HTTP/2?
  • 部署问题
    • 加密的HTTP/2该如何调试?
    • 如何使用HTTP/2服务器推送?

Tip

由于目前工作的原因,每天要和不同角色的人打交道,也逼着必须要养成了高效工作的习惯,每天甚至提前列好ToDoList变得非常重要。
推荐一款高度跨平台的软件,Todoist,Win/MacOS/Linux/Android/IOS/Chrome插件,甚至穿戴设备上都可以,主要是Linux上也可以使用,比较满意,虽然高级功能需要付费。

Share

最近搞了一些关于GC的事情,结合JDK8把JVM的内存结构重新整理了一下输出。后面会继续输出关于GC和OOM的一下文章。

JVM内存结构概述

----------本文结束感谢您的阅读----------
xiaolong wechat
一只程序猿对世界的不完全理解