一些前端小算法
(1)實現一個函數,判斷輸入是不是回文字符串
function isPlalindrome(input) {if (typeof input !== 'string') return false;return input.split('').reverse().join('') === input; }原理:
每次輸入一個數據空格隔開,將輸入的數據變成數組在反轉,反轉后變成字符串和原始字符串比較,如果一樣則是回文數
(2)找出無重復字符的最長子串
解法一:維護數組
解法二:優化的Map
var lengthOfLongestSubstring = function(s) {let map = new Map(), max = 0for(let i = 0, j = 0; j < s.length; j++) {if(map.has(s[j])) {i = Math.max(map.get(s[j]) + 1, i)}max = Math.max(max, j - i + 1)map.set(s[j], j)}return max };(3)數據結構棧
棧是一種遵從后進先出 (LIFO / Last In First Out) 原則的有序集合,它的結構類似如下:
查找: 從棧頭開始查找,時間復雜度為 O(n);
插入或刪除: 進棧與出棧的時間復雜度為 O(1);
(4)調用棧
調用棧是 JavaScript 用來管理函數執行上下文的一種數據結構,它記錄了當前函數執行的位置,哪個函數正在被執行。 如果我們執行一個函數,就會為函數創建執行上下文并放入棧頂。 如果我們從函數返回,就將它的執行上下文從棧頂彈出。 也可以說調用棧是用來管理這種執行上下文的棧,或稱執行上下文棧(執行棧)。
(5)棧空間與堆空間
(6)最小棧(包含getMin函數的棧)
在常數時間內檢索到最小元素的棧,即僅需保證 getMin 的時間復雜度為 O(1) 即可
var MinStack = function() {this.items = []this.min = null };// 進棧 MinStack.prototype.push = function(x) {if(!this.items.length) this.min = x this.min = Math.min(x, this.min)this.items.push(x) };// 出棧 MinStack.prototype.pop = function() {let num = this.items.pop() this.min = Math.min(...this.items)return num };// 獲取棧頂元素 MinStack.prototype.top = function() {if(!this.items.length) return nullreturn this.items[this.items.length -1] };// 檢索棧中的最小元素 MinStack.prototype.getMin = function() {return this.min };(7)有效的括號
(8)刪除字符串中的所有相鄰重復項
事例:
小前提:
S代表該字符串
總結
- 上一篇: 王者荣耀怎么打出超长名字 超长名字打法介
- 下一篇: 招商银行app如何开通短信提醒