增減字串匹配

2021-09-26 11:19:30 字數 1042 閱讀 4065

給定只含 「i」(增大)或 「d」(減小)的字串 s ,令 n = s.length。

返回 [0, 1, …, n] 的任意排列 a 使得對於所有 i = 0, …, n-1,都有:

如果 s[i] == 「i」,那麼 a[i] < a[i+1]

如果 s[i] == 「d」,那麼 a[i] > a[i+1]

示例 1:

輸出:「idid」

輸出:[0,4,1,3,2]

示例 2:

輸出:「iii」

輸出:[0,1,2,3]

示例 3:

輸出:「ddi」

輸出:[3,2,0,1]

分析

我們首先考慮字串中的第乙個字母。如果 s[0] == 『i』,那麼我們只要令 a[0] = 0,就一定能滿足 a[0] < a[1]。如果 s[0] == 『d』,同樣我們只要令 a[0] = n,就一定能滿足 a[0] > a[1]。

接下來,當我們考慮 s 中剩下的 n - 1 個字母時,還剩下 n 個數可以使用,這 n 個數為 [0 … n - 1] 或 [1 … n]。可以發現,由於 s[0] 的值已經確定,那麼剩下 s 中的 n - 1 個字母和 n 個可用的數變成了乙個和原問題相同,但規模為 n - 1 的問題。即如果 s[1] == 『i』,我們就令 a[1] 為剩下數中最小的那個數;如果 s[1] == 『d』,我們就令 a[1] 為剩下數中最大的那個數。

我們每次會把可以使用的數的集合中的最小值或最大值取出,並放到當前的位置,因此可以使用的數的集合總是連續的,就可以非常方便的進行維護。

這裡使用兩個值來記錄當前可用的最大最小值,遍歷字串,字元是i則取最小值,字元是d則取最大值即可,遍歷完字串要將最後乙個數字新增到返回的陣列中。

class

solution

else

if(c ==

'd')

}

res[len]

= big;

return res;

}}

148 增減字串匹配

題目描述 給定只含 i 增大 或 d 減小 的字串 s 令 n s.length。返回 0,1,n 的任意排列 a 使得對於所有 i 0,n 1,都有 如果 s i i 那麼 a i a i 1 如果 s i d 那麼 a i a i 1 示例 1 輸出 idid 輸出 0,4,1,3,2 示例 2...

942 增減字串匹配

給定只含 i 增大 或 d 減小 的字串 s 令 n s.length。返回 0,1,n 的任意排列 a 使得對於所有 i 0,n 1,都有 如果 s i i 那麼 a i a i 1 如果 s i d 那麼 a i a i 1 示例 1 輸出 idid 輸出 0,4,1,3,2 示例 2 輸出 i...

942 增減字串匹配

是有點難懂了,給出乙個字串s,s全部由 d 和 i 組成,然後現在需要解出乙個陣列,而這個陣列需要和s相匹配。假設s的長度為n,那麼這個陣列的長度是n 1,並且值是集合的任意排列。給出乙個例子,假設有字串s1 didid 那麼s1的長度為5,那麼答案就必須是集合的乙個排序,可能是,也可能是等等。而這...