题目描述
请实现一个函数,把字符串 s 中的每个空格替换成"%20"
示例
1 2
| 输入:s = "We are happy." 输出:"We%20are%20happy."
|
限制:
解题思路
1 2 3 4 5 6 7 8
| 思路:双指针 遍历一遍找出字母的数量,空格的数量 字符串长度为 字母的数量+空格的数量 将字符串扩充到 字母的数量+空格的数量 * 3 p从原来的最后一个字符开始往前遍历,q从末尾开始 当p指向的值不为空格时,复制到q,pq往前移 当p指向的值为空格时,q,q-1,q-2替换为 "%20" 直到遍历完成
|
代码
核心代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| class Solution { public: string replaceSpace(string s) { if (s.empty()) { return s; } int lenOfAlphabet = 0; int lenOfSpace = 0; int n = s.size(); for (int i = 0; i < n; i++) { if (s[i] == ' ') { lenOfSpace++; } else { lenOfAlphabet++; } } if (lenOfSpace == 0) { return s; } for (int i = 0; i < lenOfSpace; i++) { s = s + " "; } int p = n - 1, q = lenOfAlphabet + lenOfSpace * 3 - 1; while (p >= 0) { if (s[p] == ' '){ s[q--] = '0'; s[q--] = '2'; s[q--] = '%'; p --; } else{ s[q--] = s[p--]; } } return s; } };
|
main函数
1 2 3 4 5 6 7 8
| int main(int argc, char const *argv[]) { string s = "We are happy."; Solution s1; string ans = s1.replaceSpace(s); cout << "ans: " << ans << endl; return 0; }
|
通过截图
