Fork me on GitHub

Leetcode-409

Leecode-409 Longest Palindrome

思路:贪心算法

题目描述:

  • 给定一个字符串,问其中字母能构造出最长多少的回文串
1
2
3
4
5
6
7
8
Input:
"abccccdd"

Output:
7

Explanation:
One longest palindrome that can be built is "dccaccd", whose length is 7.

Solution:

  • 回文串是一个正着读和反着读都一样的字符串。以回文中心为分界线,对于回文串中左侧的字符 ch,在右侧对称的位置也会出现同样的字符。例如在字符串 "abba" 中,回文中心是 "ab|ba" 中竖线的位置,而在字符串 "abcba" 中,回文中心是 "ab(c)ba" 中的字符 "c" 本身。

  • 我们可以发现,在一个回文串中,只有最多一个字符出现了奇数次,其余的字符都出现偶数次。

  • 如果有任何一个字符 ch 的出现次数 v 为奇数(即 v % 2 == 1),那么可以将这个字符作为回文中心,注意只能最多有一个字符作为回文中心。

  • 在代码中,我们用 ans 存储回文串的长度,由于在遍历字符时,ans 每次会增加 v / 2 * 2,因此 ans 一直为偶数。但在发现了第一个出现次数为奇数的字符后,我们将 ans 增加 1,这样 ans 变为奇数,在后面发现其它出现奇数次的字符时,我们就不改变 ans 的值了。

阅读更多...

LayUI-页面设计

LayUI-页面设计

  • layui(谐音:类UI) 是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用。

  • 其外在极简,却又不失饱满的内在,体积轻盈,组件丰盈,从核心代码到 API 的每一处细节都经过精心雕琢,非常适合界面的快速开发。

  • layui 首个版本发布于 2016 年金秋,她区别于那些基于 MVVM 底层的 UI 框架,却并非逆道而行,而是信奉返璞归真之道。准确地说,她更多是为服务端程序员量身定做,你无需涉足各种前端工具的复杂配置,只需面对浏览器本身,让一切你所需要的元素与交互,从这里信手拈来。

  • layui 兼容人类正在使用的全部浏览器(IE6/7除外),可作为 PC 端后台系统与前台界面的速成开发方案。

阅读更多...

JavaScript-流程控制

JavaScript-流程控制

1. 条件判断

  • JavaScript使用if () { … } else { … }来进行条件判断。例如,根据年龄显示不同内容,可以用if语句实现如下:
1
2
3
4
5
6
var age = 20;
if (age >= 18) { // 如果age >= 18为true,则执行if语句块
alert('adult');
} else { // 否则执行else语句块
alert('teenager');
}

如果还要更细致地判断条件,可以使用多个if…else…的组合:

1
2
3
4
5
6
7
8
var age = 3;
if (age >= 18) {
alert('adult');
} else if (age >= 6) {
alert('teenager');
} else {
alert('kid');
}

if-else语句的执行特点是二选一,如果在多个if…else…语句中,如果某个条件成立,后面的将不再判断

2. for 循环

1
2
3
4
5
6
var x = 0;
var i;
for (i=1; i<=10000; i++) {
x = x + i;
}
x; // 50005000
  • i=1 这是初始条件,将变量i置为1;
  • i<=10000 这是判断条件,满足时就继续循环,不满足就退出循环;
  • i++ 这是每次循环后的递增条件,由于每次循环后变量i都会加1,因此它终将在若干次循环后不满足判断条件i<=10000而退出循环。

for循环最常用的地方是利用索引来遍历数组:

1
2
3
4
5
6
var arr = ['Apple', 'Google', 'Microsoft'];
var i, x;
for (i=0; i<arr.length; i++) {
x = arr[i];
console.log(x);
}

for循环的3个条件都是可以省略的,如果没有退出循环的判断条件,就必须使用break语句退出循环,否则就是死循环:

1
2
3
4
5
6
7
var x = 0;
for (;;) { // 将无限循环下去
if (x > 100) {
break; // 通过if判断来退出循环
}
x ++;
}

输出结果:

for循环的一个变体是for … in循环,它可以把一个对象的所有属性依次循环出来:

1
2
3
4
5
6
7
8
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
console.log(key); // 'name', 'age', 'city'
}

3. while 循环

for循环之外的条件判断

  • for循环在已知循环的初始和结束条件时非常有用。而上述忽略了条件的for循环容易让人看不清循环的逻辑,此时用while循环更佳。
  • while循环只有一个判断条件,条件满足,就不断循环,条件不满足时则退出循环。比如我们要计算100以内所有奇数之和,可以用while循环实现:
1
2
3
4
5
6
7
var x = 0;
var n = 99;
while (n > 0) {
x = x + n;
n = n - 2;
}
x; // 2500

最后一种循环是do { … } while()循环,它和while循环的唯一区别在于,不是在每次循环开始的时候判断条件,而是在每次循环完成的时候判断条件:至少 执行一次!

1
2
3
4
5
var n = 0;
do {
n = n + 1;
} while (n < 100);
n; // 100
  • 在编写循环代码时,务必小心编写初始条件和判断条件,尤其是边界值。

  • 同时也要避免死循环的产生!

Leetcode-1160

Leecode-1160 Find Words That Can Be Formed by Characters

思路:哈希表

题目描述:

  • 给定一个字符串,看这个字符串中的字母能否组成数组中的字符串
  • 如果能,返回能组成字符串的长度

示例1:

1
2
3
4
Input: words = ["cat","bt","hat","tree"], chars = "atach"
Output: 6
Explanation:
The strings that can be formed are "cat" and "hat" so the answer is 3 + 3 = 6.

示例2:

1
2
3
4
Input: words = ["hello","world","leetcode"], chars = "welldonehoneyr"
Output: 10
Explanation:
The strings that can be formed are "hello" and "world" so the answer is 5 + 5 = 10.

Solution:

  • 直接统计字母表chars中每个字母出现的次数
  • 同时统计words中每个单词中字母出现的次数
  • 如果该单词中的每个字母出现的次数都小于等于词汇表中对应字母出现的次数,就将该单词长度加入到答案中。
阅读更多...

Leetcode-面试题01.06-压缩字符串

Leecode-面试题01.06 Compress String LCCI

思路:双指针

题目描述:压缩字符串

  • 重复的字母用数字代替,只显示出现第一次的字母
  • 如果压缩后的字符串比之前的长就返回原来的字符串

示例1:

1
2
Input: "aabcccccaaa"
Output: "a2b1c5a3"

示例2:

1
2
3
4
Input: "abbccd"
Output: "abbccd"
Explanation:
The compressed string is "a1b2c2d1", which is longer than the original string.

阅读更多...

JavaScript-基础语法

JavaScript-基础语法

1. 注释

​ JavaScript的语法和Java语言类似,每个语句以;结束,语句块用{...}。但是,JavaScript并不强制要求在每个语句的结尾加;

​ 浏览器中负责执行JavaScript代码的引擎会自动在每个语句的结尾补上; 。JavaScript严格区分大小写,如果弄错了大小写,程序将报错或者运行不正常

注释

1
2
3
4
5
6
/* 从这里开始是块注释
仍然是注释
仍然是注释
注释结束 */

// 这是一行注释
阅读更多...

Leetcode-695

Leecode-695 Max Area of Island

思路:DFS

题目描述

  • 有一个2D的数组,0代表海洋,1代表陆地
  • 如果陆地有上下左右连在一起的,那么面积加1

示例1:

1
2
3
4
5
6
7
8
[[0,0,1,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,1,1,0,1,0,0,0,0,0,0,0,0],
[0,1,0,0,1,1,0,0,1,0,1,0,0],
[0,1,0,0,1,1,0,0,1,1,1,0,0],
[0,0,0,0,0,0,0,0,0,0,1,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,0,0,0,0,0,0,1,1,0,0,0,0]]

输出结果为6

示例2:

1
[[0,0,0,0,0,0,0,0]]

输出结果为0

Solution:DFS

  • 每次调用的时候默认num=1,进入后判断如果不是岛屿,则直接返回0,就可以避免错误的情况。
  • 每次找到岛屿,就直接把岛屿改成0,这就是传说中的沉岛思想,就是遇到岛屿就把他和周围的全部沉默。
阅读更多...
  • © 2019-2022 Zhuuu
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信