將給定的長度為五的字串表示為HH:MM格式的時間。字串中可能包含一些「?」我們必須用任何數字替換它們,以使結果成為有效的時間,且可能是最大的可能時間。此外,給定的字串數字將是有效的,並且「:」將出現在字串的確切位置。我們將首先使用蠻力法,然後使用高效方法。
Given string: 12:5? Output: 12:59
我們只有一個位置需要填補,而我們能夠獲得的最大時間是12:59。
Given string: ?0:?9 Output: 20:59
我們這裡有兩個空槽,首先,我們將專注於小時部分,我們有三個選擇0、1和2來填充。對於分鐘部分,我們有從0到5的選擇,為了最大化,我們可以填充5。
我們已經看過了例子,現在讓我們來看看我們可能面臨的不同類型的情況 −
我們有兩個部分字串,小時部分和分鐘部分。
小時部分的範圍是0到23,分鐘部分的範圍是0到59。
小時部分還有更多的狀況−
‘x?’ 其中 x 可以是 0、1 和 2。對於 0,我們可以選擇 0 作為最佳選擇,對於 1,我們可以選擇 9 作為最佳選擇,對於 2,我們可以選擇 3 作為最佳選擇。
'?x',其中x的範圍可以是0到9。如果x在0到3的範圍內,我們可以用2替換它,否則1將是最好的。
‘??’ 因為我們需要最大化,所以我們將其替換為 23。
會議記錄,部分還有進一步的案例 −
‘x?’其中x可以在0到5的範圍內。 9將是我們最好的選擇來取代‘?’。
‘?x’其中x可以在0到9的範圍內。 5將是我們最好的選擇來替換‘?’。
“??”,因為我們必須最大化,然後我們將其替換為 59。
讓我們來看看實作上述步驟的程式碼 -
#include <iostream> using namespace std; // function to replace hours string replaceHours(string s){ if(s[0] == '?' && s[1] == '?'){ //Both hour characters are '?' // replace with the maximum hour we can achieve s[0] = '2'; s[1] = '3'; } else if(s[0] == '?'){ // if the second number of hours is in the range 0 to 3 // replace by 2 if(s[1] < 4){ s[0] = '2'; } else{ s[0] = '1'; // otherwise replace by one } } else if(s[1] == '?'){ // if the first character is '2' we can go only upto 3 if(s[0] == '2'){ s[1] = '3'; } else{ s[1] = '9'; // else we can go for 9 } } return s; } // function to replace minutes string replaceMinutes(string s){ if(s[3] == '?' && s[4] == '?'){ // both minutes characters are '?' // replace with maximum minutes we can acheive s[3] = '5'; s[4] = '9'; } else if(s[3] == '?'){ // we can maximum get 5 here s[3] = '5'; } else if(s[4] == '?'){ // we can get maximum 9 here s[4] = '9'; } return s; } int main(){ string str = "2?:3?"; // given string // calling the function for updation of the minutes str = replaceMinutes(str); // calling to the function for updation of the hours str = replaceHours(str); // printing the final answer cout<<"The maximum time we can get by replacing ? is: "<< str<<endl; return 0; }
The maximum time we can get by replacing ? is: 23:39
上述程式碼的時間複雜度為O(1)或常數,因為我們沒有使用任何循環或遞歸調用,只是檢查了if-else條件
上述程式碼的空間複雜度為O(1),因為我們沒有使用任何額外的空間。此外,對於該函數,我們傳遞的字串大小始終是固定的5。
注意:為了使程式碼更美觀或易讀,可以使用switch語句,它們不會影響時間或空間複雜度,並且會使閱讀更有效率。
此外,回溯和重新檢查是一種解決方案,但這將檢查每種情況,並且在這裡實施起來效率不高。
在本教程中,我們得到了一個以24小時製表示時間的字串。字串中有一些“?”需要替換,以獲得有效的最大時間,並保證字串中的字元始終指向有效的時間。我們使用了if-else條件和兩個函數來替換“?”為適當的情況。由於我們沒有使用任何循環或遞歸函數,上述程式碼的時間和空間複雜度是恆定的。
以上是最大化給定時間內的缺失值,格式為HH:MM的詳細內容。更多資訊請關注PHP中文網其他相關文章!