力扣刷題記錄Day01
阿新 • • 發佈:2021-12-06
1816.截斷句子
句子 是一個單詞列表,列表中的單詞之間用單個空格隔開,且不存在前導或尾隨空格。每個單詞僅由大小寫英文字母組成(不含標點符號)。
例如,"Hello World"、"HELLO" 和 "hello world hello world" 都是句子。
給你一個句子 s 和一個整數 k ,請你將 s 截斷 ,使截斷後的句子僅含 前 k 個單詞。返回 截斷 s 後得到的句子。
class Solution { public: string truncateSentence(string s, int k) {執行用時:4 ms, 在所有C++提交中擊敗了37.72%的使用者 記憶體消耗:7.6 MB, 在所有C++提交中擊敗了5.26%的使用者 通過測試用例:72/72 標準答案char* str1 = (char*)s.data();//string->char char* result = strtok(str1, " ");//第一次分割 string output = result;//輸出 for (int i = 1; i < k; i++) { result = strtok(NULL, " ");//第二次分割 output = output+" "+result;//輸出疊加 } return output; } };
classSolution { public: string truncateSentence(string s, int k) { int n = s.size(); int end = 0, count = 0; for (int i = 1; i <= n; i++) {//這裡i比s[i]多1,i是從1計算 if (i == n || s[i] == ' ') {//這裡是遍歷到最後或者i下一個是空格就count++(因為最後一個字元後面沒有空格) count++;if (count == k) { end = i; break; } } } return s.substr(0, end); //substr(a,b) 返回從第a個位置長度為b的字串 //substr(a) 返回位置a後面的所有剩餘字串(不包括a) } }; int main(){ string s = "Hello every body I am back here"; Solution sol; string s1=sol.truncateSentence(s, 5); cout << s1; system("pause"); return 0; }