哈希表的实例应用

近日在学习数组方法的过程中,接触到了一个新内容(哈希表),当然这是小女子才疏学浅所致。浅觉今后仍会用到,所以借鉴前辈知识,在此小小总结一番,以方便日后查阅。

那,话不多说,这就开始喽!!!(特此备注,小女子只是总结哈希表实例应用,不是专业理论哦!毕竟目前能力有限嘛!还请见谅)

首先,我们来“欣赏”一道题,题目如下:

给定一个只包括‘(’,‘)’,‘{’,‘}’,‘[’,‘]’的字符串,判断字符串是否有效

        有效字符串需满足:
        左括号必须用相同类型的右括号闭合
        左括号必须以正确的顺序闭合
        注意空字符串可被认为是有效字符串

        示例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/   描述或代码错误,还请阁下不吝赐教,小女子有礼)

posted @ 2021-03-04 23:36  子衿兮  阅读(206)  评论(0)    收藏  举报