题解链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/solution/mian-shi-ti-05-ti-huan-kong-ge-ji-jian-qing-xi-tu-/
来源:力扣(LeetCode)
题解上有视频
1、初始化:空格数量 count ,字符串 s 的长度 len ;
2、统计空格数量:遍历 s ,遇空格则 count++ ;
3、修改 s 长度:添加完 “%20” 后的字符串长度应为 len + 2 * count ;
4、倒序遍历修改:i 指向原字符串尾部元素, j 指向新字符串尾部元素;当 i = j 时跳出(代表左方已没有空格,无需继续遍历);
当 s[i] 不为空格时:执行 s[j] = s[i] ;
当 s[i] 为空格时:将字符串闭区间 [j-2, j] 的元素修改为 “%20” ;由于修改了 3 个元素,因此需要 j -= 2 ;
5、返回值:已修改的字符串 s ;
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
| class Solution { public: string replaceSpace(string s) { int count = 0, len = s.size(); for (char c : s) { if (c == ' ') count++; } s.resize(len + 2 * count); for(int i = len - 1, j = s.size() - 1; i < j; i--, j--) { if (s[i] != ' ') s[j] = s[i]; else { s[j - 2] = '%'; s[j - 1] = '2'; s[j] = '0'; j -= 2; } } return s; } };
|
1 2 3 4 5 6 7 8 9
| class Solution { public: string reverseLeftWords(string s, int n) { string str1; str1 =s.substr(0,n); s.erase(0,n); return s+str1; } };
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| class Solution { public: string reverseLeftWords(string s, int n) { string str=""; for(int i=n;i<s.size();i++){ str+=s[i]; } for(int i=0;i<n;i++){ str+=s[i]; } return str; } };
|
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 65
| class Solution { public: void reverse(string &s,int start,int end){ int i=start; int j=end; for(;i<j;i++,j--){ swap(s[i],s[j]); } } void removeExtraStr(string &s){ int fast=0,slow=0; while(s[fast]==' ' &&s.size()>0 &&fast<s.size()) { fast++; } for(;fast<s.size();fast++){ if(fast-1>0&& s[fast]==' '&& s[fast-1]==' '){ continue; } else{ s[slow]=s[fast]; slow++; } } if(s[slow-1]==' '){ s.resize(slow-1); } else{ s.resize(slow); } } string reverseWords(string s) { removeExtraStr(s); reverse(s,0,s.size()-1); int start=0; for(int i=0;i<s.size();i++){ if(s[i]==' '&&s[i-1]!=' '){ reverse(s,start,i-1); start=i+1; } if((i == (s.size() - 1) )&& s[i] != ' '){ reverse(s,start,i);
} } return s; } };
|