無盡演算法之 增減字串匹配

2021-10-02 06:49:13 字數 774 閱讀 9260

給定只含 「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]

1 <= s.length <= 1000

s 只包含字元 「i」 或 「d」。

思路:如果按照一般人的填數字去想這個問題肯定是極其麻煩的,想了半個小時始終不得要點 關鍵不在於總共有幾個d幾個i,也不在於什麼根據前後判斷

在於為啥不是遞增遞減(為啥不是0123而是什麼0312)

這個極其核心的奧秘就是

程式根據增減關係每一次都在取極值(最大最小)!所以根據這種思路可以使得數字不重複,每次都能留下足夠的增減空間(因為我們根據他的規則生成了n+1個項)

題解:

class

solution

result[s.

length()

]=max;

// 這裡 min max 都可以, 因為就剩乙個數了

return result;

}}

增減字串匹配

給定只含 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...

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...