力C演算法JS:1544. 整理字串
題目描述
給你一個由大小寫英文字母組成的字串 s 。
一個整理好的字串中,兩個相鄰字元 s[i] 和 s[i+1],其中 0
若 s[i] 是小寫字元,則 s[i+1] 不可以是相同的大寫字元。
若 s[i] 是大寫字元,則 s[i+1] 不可以是相同的小寫字元。
請你將字串整理好,每次你都可以從字串中選出滿足上述條件的 兩個相鄰 字元並刪除,直到字串整理好為止。
請返回整理好的 字串 。題目保證在給出的約束條件下,測試樣例對應的答案是唯一的。
注意:空字串也屬於整理好的字串,儘管其中沒有任何字元。
示例1
輸入:s = "leEeetcode"
輸出:"leetcode"
解釋:無論你第一次選的是 i = 1 還是 i = 2,都會使 "leEeetcode" 縮減為 "leetcode" 。
示例2
輸入:s = "abBAcC"
輸出:""
解釋:存在多種不同情況,但所有的情況都會導致相同的結果。例如:
"abBAcC" --> "aAcC" --> "cC" --> ""
"abBAcC" --> "abBA" --> "aA" --> ""
解題思路
一, JS API
Math.abs(); // 獲取絕對值
String.prototype.charCodeAt() // 獲取字元 ASCII 碼值
字元的 ASCII 碼值
'a'.charCodeAt() //97
'A'.charCodeAt() //65
'b'.charCodeAt() //98
'B'.charCodeAt() //66
∵ 同一小寫字母與大寫字母相減 為 ±32
∴ 當s[i]與s[i-1]是同一字母,且只有一個是大寫時:
Math.abs(s[i].charCodeAt()-s[i-1].charCodeAt())===32
佇列入棧
var makeGood = function (str) {
// 佇列 q 存輸入,棧 s 存輸出,都用陣列表示
let q = str.split(''),s = [];
// 迭代佇列
while (q.length) {
// 出隊字元
let curS = q.shift()
// 出隊字元ASCII
let curV = curS.charCodeAt()
// 棧尾字元ASCII
let preV = s[s.length - 1] && s[s.length - 1].charCodeAt()
// 如果出隊字元與棧尾字元 符合題意需要刪除的條件
if (preV && Math.abs(curV - preV) === 32) {
// 出棧
s.pop()
} else {
// 入棧
s.push(curS)
}
}
// 輸出
return s.join('')
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4687/viewspace-2797186/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JS陣列字串方法整理JS陣列字串
- js排序演算法整理JS排序演算法
- 力扣#43 字串相乘(C++)力扣字串C++
- 【每週例題】力扣 C++ 字串相乘力扣C++字串
- 我的力扣演算法1370-上升下降字串力扣演算法字串
- js 整理JS
- 高效字串匹配演算法——BM 演算法詳解(C++)字串匹配演算法C++
- js字串方法JS字串
- C++實現蠻力最近對演算法C++演算法
- 常用JS方法整理JS
- js常用方法整理JS
- JS字串編碼JS字串編碼
- JS去掉字串空格JS字串
- js字串排序方法JS字串排序
- JS json字串轉物件、物件轉字串JSON字串物件
- 字串和陣列常用方法整理字串陣列
- C#根據雜湊演算法生成類似uuid字串C#演算法UI字串
- c/c++面試整理C++面試
- 力扣oj-字串相乘力扣字串
- js 部分學習整理JS
- Js方法整理自用(未完)JS
- js陣列排序整理JS陣列排序
- js字串方法總結JS字串
- js 字串方法小結JS字串
- js物件轉json字串物件JSON字串
- JS 校驗非法字串JS字串
- js中的字串方法JS字串
- C++整理1C++
- C++整理2C++
- 字串演算法字串演算法
- C語言字串C語言字串
- C# 字串操作C#字串
- c++ 分割字串C++字串
- C# 字串(String)C#字串
- python字串格式化的方法整理Python字串格式化
- 七種常見的陣列排序演算法整理(C語言版本)陣列排序演算法C語言
- 原生JS知識點整理JS
- 原生js的常用方法整理JS