網(wǎng)上有很多關(guān)于pos機(jī)刷卡重復(fù)交易,leetcode316的知識,也有很多人為大家解答關(guān)于pos機(jī)刷卡重復(fù)交易的問題,今天pos機(jī)之家(www.afbey.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
pos機(jī)刷卡重復(fù)交易
題目給你一個僅包含小寫字母的字符串,請你去除字符串中重復(fù)的字母,使得每個字母只出現(xiàn)一次。
需保證返回結(jié)果的字典序最?。ㄒ蟛荒艽騺y其他字符的相對位置)。
示例 1:輸入: "bcabc" 輸出: "abc"
示例 2:輸入: "cbacdcbc" 輸出: "acdb"
注意:該題與 1081
https://leetcode-cn.com/problems/smallest-subsequence-of-distinct-characters 相同
解題思路分析1、單調(diào)棧;時間復(fù)雜度O(n),空間復(fù)雜度O(n)
func removeDuplicateLetters(s string) string {stack := make([]byte, 0)arr := [256]byte{}m := make(map[byte]bool)for i := 0; i < len(s); i++ {arr[s[i]]++}for i := 0; i < len(s); i++ {if m[s[i]] == true {arr[s[i]]--continue}// arr[棧頂]說明有重復(fù)元素// 棧頂>s[i]:說明字典序不滿足for len(stack) > 0 && stack[len(stack)-1] > s[i] && arr[stack[len(stack)-1]] > 0 {m[stack[len(stack)-1]] = falsestack = stack[:len(stack)-1]}stack = append(stack, s[i])arr[s[i]]--m[s[i]] = true}return string(stack)}
2、遞歸;時間復(fù)雜度O(n),空間復(fù)雜度O(n)
func removeDuplicateLetters(s string) string {arr := [26]int{}pos := 0for i := 0; i < len(s); i++ {arr[s[i]-'a']++}for i := 0; i < len(s); i++ {if s[i] < s[pos] {pos = i}arr[s[i]-'a']--if arr[s[i]-'a'] == 0 {break}}if len(s) == 0 {return ""}newStr := strings.ReplaceAll(s[pos+1:], string(s[pos]), "")return string(s[pos]) + removeDuplicateLetters(newStr)}總結(jié)
Hard題目,題目可以使用單調(diào)棧來處理字典序
以上就是關(guān)于pos機(jī)刷卡重復(fù)交易,leetcode316的知識,后面我們會繼續(xù)為大家整理關(guān)于pos機(jī)刷卡重復(fù)交易的知識,希望能夠幫助到大家!
