哈希表的实例应用
近日在学习数组方法的过程中,接触到了一个新内容(哈希表),当然这是小女子才疏学浅所致。浅觉今后仍会用到,所以借鉴前辈知识,在此小小总结一番,以方便日后查阅。
那,话不多说,这就开始喽!!!(特此备注,小女子只是总结哈希表实例应用,不是专业理论哦!毕竟目前能力有限嘛!还请见谅)
首先,我们来“欣赏”一道题,题目如下:
给定一个只包括‘(’,‘)’,‘{’,‘}’,‘[’,‘]’的字符串,判断字符串是否有效
有效字符串需满足:
左括号必须用相同类型的右括号闭合
左括号必须以正确的顺序闭合
注意空字符串可被认为是有效字符串
示例1:
输入:“{}”
输出:true
示例2:
输入: "()[] {}"
输出: true
示例3:
输入: " (]"
输出: false
示例4:
输入: "([)]"
输出: false
示例5:
输入: "{[]}"
输出: true
不知,阁下在看完此题后,心中是否已有题解?
尚且不论其他,就我个人所学的知识,for循环是第一解法,如下:
1 function isStr(str) {
2 var flag1 = true;
3 var flag2 = true;
4 for (var i = 0; i < str.length / 2; i++) {
5 if (
6 [str[i], str[str.length - i - 1]].join("") != "()" &&
7 [str[i], str[str.length - i - 1]].join("") != "{}" &&
8 [str[i], str[str.length - i - 1]].join("") != "[]"
9 ) {
10 flag1 = false;
11 break;
12 }
13 }
14 for (var j = 0; j < str.length; j += 2) {
15 if (
16 [str[j], str[j + 1]].join("") != "()" &&
17 [str[j], str[j + 1]].join("") != "{}" &&
18 [str[j], str[j + 1]].join("") != "[]"
19 ) {
20 flag2 = false;
21 break;
22 }
23 }
24 return flag1 || flag2;
25 }
26
27 //测试函数的有效性
28 console.log(isStr("[()}")); //return false
29 console.log(isStr("{[()]}")); //return true
30 console.log(isStr("")); //return true
31 console.log(isStr("(){}[]")); //return true
虽然,得出了需要的结果,但上述代码着实累赘!!!
由此,引入今日主题——哈希表
老规矩,老习惯,我们先不管哈希表是什么,就直接用所谓的哈希表来解上面那道题
1 function f(string) {
2 var hashMap = {
3 "{": "}",
4 "(": ")",
5 "[": "]",
6 };
7 var stack = [];
8 for (var s of string) {
9 var thisBrackets = hashMap[s];
10 if (thisBrackets) {
11 stack.push(thisBrackets);
12 } else {
13 if (stack[stack.length - 1] === s) {
14 stack.pop();
15 } else {
16 stack.push(s);
17 }
18 }
19 }
20 return stack.length === 0;
21 }
22 //测试函数功能
23 console.log(f("{}"));
24 console.log(f("()[]{}"));
25 console.log(f("(]"));
26 console.log(f("([)]"));
27 console.log(f("{[]}"));
28 console.log(f("())))"));
29 console.log(f(""));
显而易见,哈希表解法的代码要比普通解法的代码简洁的多呢!问题来了,那什么是哈希表呢?
就小女子目前浅显的理解,js的对象其实就是哈希表!!!
如果阁下想要知晓哈希表理论知识,还请移驾其他大神的窝,小女子能力有限,还请见谅。
(ps:文中题目非原创,来源:https://leetcode-cn.com/ 描述或代码错误,还请阁下不吝赐教,小女子有礼)
知识它不进脑子啊!!!欢迎阁下指教

浙公网安备 33010602011771号