(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 = 0
for(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) 原則的有序集合,它的結構類似如下:
function Stack() {
let items = []
this.push = function(e) {
items.push(e)
}
this.pop = function() {
return items.pop()
}
this.isEmpty = function() {
return items.length === 0
}
this.size = function() {
return items.length
}
this.clear = function() {
items = []
}
}
查找: 從棧頭開始查找,時間複雜度爲 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 null
return this.items[this.items.length -1]
};
// 檢索棧中的最小元素
MinStack.prototype.getMin = function() {
return this.min
};
(7)有效的括號
var isValid = function(s) {
let map = {
'{': '}',
'(': ')',
'[': ']'
}
let stack = []
for(let i = 0; i < s.length ; i++) {
if(map[s[i]]) {
stack.push(s[i])
} else if(s[i] !== map[stack.pop()]){
return false
}
}
return stack.length === 0
};
(8)刪除字符串中的所有相鄰重複項
事例:
輸入:"abbaca"
輸出:"ca"
解釋:
例如,在 "abbaca" 中,我們可以刪除 "bb" 由於兩字母相鄰且相同,這是此時唯一可以執行刪除操作的重複項。之後我們得到字符串 "aaca",其中又只有 "aa" 可以執行重複項刪除操作,所以最後的字符串爲 "ca"。
小前提:
- 0<=
S.length
<= 20000S
僅由小寫英文字母組成
S
代表該字符串
var removeDuplicates = function(S) {
let stack = []
for(c of S) {
let prev = stack.pop()
if(prev !== c) {
stack.push(prev)
stack.push(c)
}
}
return stack.join('')
};