leetcode 劍指offer 5 替換空格
阿新 • • 發佈:2020-12-22
問題描述:請實現一個函式,把字串 s
中的每個空格替換成"%20"。
在 C++ 語言中, string 被設計成「可變」的型別,因此可以在不新建字串的情況下實現原地修改。
由於需要將空格替換為 "%20" ,字串的總字元數增加,因此需要擴充套件原字串 s 的長度,計算公式為:新字串長度 = 原字串長度 + 2 * 空格個數 ,示例如下圖所示。
演算法流程:
- 初始化:空格數量 count ,字串 s 的長度 len ;
- 統計空格數量:遍歷 s ,遇空格則 count++ ;
- 修改 s 長度:新增完 "%20" 後的字串長度應為 len + 2 * count ;
- 倒序遍歷修改:i 指向原字串尾部元素, j 指向新字串尾部元素;當 i = j 時跳出(代表左方已沒有空格,無需繼續遍歷);
- 當 s[i] 不為空格時:執行 s[j] = s[i] ;
- 當 s[i] 為空格時:將字串閉區間 [j-2, j] 的元素修改為 "%20" ;由於修改了 3 個元素,因此需要 j -= 2 ;
- 返回值:已修改的字串 s ;
class Solution { public: string replaceSpace(string s) { int i = s.size() - 1; int n = std::count(s.cbegin(), s.cend(), ' '); s.resize(i + n * 2 + 1); std::cout << s << std::endl; for(int j = s.size() - 1; i >= 0; --i, --j) { if(s[i] != ' ') { s[j] = s[i]; } else { s[j] = '0'; s[j-1] = '2'; s[j-2] = '%'; j -= 2; } } return s; } };