1. 問題描述:
給你兩個字串 word1 和 word2 。你需要按下述方式構造乙個新字串 merge :如果word1 或 word2 非空,選擇下面選項之一 繼續操作:
如果 word1 非空,將 word1 中的第乙個字元附加到 merge 的末尾,並將其從 word1 中移除。例如,word1 = "abc" 且 merge = "dv" ,在執行此選項操作之後,word1 = "bc" ,同時 merge = "dva" 。
如果 word2 非空,將 word2 中的第乙個字元附加到 merge 的末尾,並將其從 word2 中移除。例如,word2 = "abc" 且 merge = "" ,在執行此選項操作之後,word2 = "bc" ,同時 merge = "a" ,返回你可以構造的字典序最大的合併字串 merge 。長度相同的兩個字串 a 和 b 比較字典序大小,如果在 a 和 b 出現不同的第乙個位置,a 中字元在字母表中的出現順序位於 b 中相應字元之後,就認為字串 a 按字典序比字串 b 更大。例如,"abcd" 按字典序比 "abcc" 更大,因為兩個字串出現不同的第乙個位置是第四個字元,而 d 在字母表中的出現順序位於 c 之後。
示例 1:
輸入:word1 = "cabaa", word2 = "bcaaa"
輸出:"cbcabaaaaa"
解釋:構造字典序最大的合併字串,可行的一種方法如下所示:
- 從 word1 中取第乙個字元:merge = "c",word1 = "abaa",word2 = "bcaaa"
- 從 word2 中取第乙個字元:merge = "cb",word1 = "abaa",word2 = "caaa"
- 從 word2 中取第乙個字元:merge = "cbc",word1 = "abaa",word2 = "aaa"
- 從 word1 中取第乙個字元:merge = "cbca",word1 = "baa",word2 = "aaa"
- 從 word1 中取第乙個字元:merge = "cbcab",word1 = "aa",word2 = "aaa"
- 將 word1 和 word2 中剩下的 5 個 a 附加到 merge 的末尾。
示例 2:
輸入:word1 = "abcabc", word2 = "abdcaba"
輸出:"abdcabcabcaba"
2. 思路分析:
分析題目可以知道我們可以依次比較兩個字串中當前位置之後的字串的字典序大小,這樣可以根據比較的結果先取出字典序較大的那個字元,所以可以設定兩個變數i, j表示兩個字串的當前位置,因為使用的是python語言所以可以使用直接使用python的切片操作比較字串的字典序大小,我們可以取出字典序較大的那個字元拼接到結果中即可(實際上是貪心演算法),在力扣的題解中也提供了字尾陣列的解法可以參考一下(比較複雜)
3. **如下:
class solution:
def largestmerge(self, word1: str, word2: str) -> str:
res = ""
i, j = 0, 0
while i < len(word1) and j < len(word2):
# python的切片操作擷取字串比較字典序大小
if word1[i:] > word2[j:]:
res += word1[i]
i += 1
else:
res += word2[j]
j += 1
if i < len(word1):
res += word1[i:]
if j < len(word2):
res += word2[j:]
return res
python 怎樣構造字典格式的資料
dict 函式的使用 第一種方法 l name xueli age 12 dd1 dict l print dd1 第二種方法 dd2 dict name xueli age 12 print dd2 第三種方法 這裡第三種方法在格式轉換方面挺實用,比如吧cookies的string格式轉換成規範的...
字典序最大的子串行
給定字串s,s只包含小寫字母,請求出字典序最大的子串行。子串行 字典序 一行乙個字串s 1 s 100,000 字典序最大的子串行。示例1 ababba bbba 示例2abbcbccacbbcbaaba cccccbba 題解 從左往右掃一遍找到第乙個最大的字母。從後往前掃,如果前面的字母大於等於...
njupt 字典序最大的出棧序列
題意 給出入棧序列,保證各個元素值各不相等,輸出字典序最大的出棧序列.如入棧序列 1,2,9,4,6,5 則字典序最大的出棧序列為9,6,5,4,2 1 棧的性質就是先進後出,所以對於依次入棧的兩個元素a,b,有兩種情況 1 先壓a進棧,不彈出,再壓b進棧,則最終的出棧序列a一定位於b之後。2 要想...