有一個論壇,每個條目限制為 K 個字符。在此任務中,您的作業是實作一種演算法來裁剪過長的訊息。您會收到一條由英文字母和空格組成的訊息,可能超過限制。您的演算法應該從訊息末尾裁剪一些單詞,請記住:
它可能不會洗掉單詞的一部分;輸出訊息不能以空格結尾;輸出訊息不得超過 K 字符限制;輸出訊息應盡可能長。這意味著,在某些情況下,演算法可能需要裁剪掉整個訊息,輸出一個空字串
.
例如,給定文本:
“我們測驗編碼器的 Codility”
當 K = 14 時,演算法應該輸出:
《我們》
注意:
輸出“Codility We te”將不正確,因為原始訊息是從單詞中間裁剪的;輸出“Codility We”不正確,因為它以空格結尾;輸出“Codility We test coders”將不正確,因為它超出了 K 字符限制;輸出“Codility”將不正確,因為它比正確的輸出短。寫一個函式
char * solution(char *message, int K);
其中,給定一條訊息和一個整數 K,回傳裁剪為不超過 K 個字符的訊息,如上所述。
例子:
給定訊息 =“Codility We test coders”和 K = 14,該函式應回傳“Codility We”。
給定訊息 =“為什么不”和 K = 100,函式應該回傳“為什么不”。
給定訊息 =“快速的棕色狐貍跳過懶惰的狗”和 K = 39,該函式應回傳“快速的棕色狐貍跳過懶惰的狗”。
給定訊息 =“裁剪或不裁剪”且 K = 21,該函式應回傳“裁剪或不裁剪”。
假使,假設:
K 是 [1..500] 范圍內的整數;message 是一個非空字串,最多包含 500 個英文字母和空格。訊息的開頭或結尾沒有空格;訊息中也不能有兩個或多個連續的空格。在您的解決方案中,關注正確性。您的解決方案的性能將不是評估的重點。
uj5u.com熱心網友回復:
此代碼將通過所有性能和正確性測驗
char * (char *message, int K) {
int N = strlen(message); // Length of message
int last_index=0;
// if length of message is less than Limit, just return the same message
if (N <= K){
return message;
}
else{
//find the space after last word without breaking the word
for (int i = K; i > 0; i--){
if(isspace(message[i])){
last_index = i;
break;
}
}
//trim the message by adding "end of string" to index we found in previous step
message[last_index] = '\0';
return message;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/496565.html
下一篇:了解指向c中指標的指標
