LeetCode刷题记录.Day14
反转字符串
class Solution { public: void reverseString(vector<char>& s) { int right = s.size() - 1; for(int left = 0; left<right; left++){ int temp = s[right]; s[right] = s[left]; s[left] = temp; right--; } } };
刷题刷到现在,算是简单题了。双指针法轻松解决
反转字符串Ⅱ
class Solution { public: string reverseStr(string s, int k) { for(int i = 0;i < s.size(); i += (2 * k)){ if(i + k <= s.size()){ reverse(s.begin() + i, s.begin() + i + k); }else{ reverse(s.begin() + i, s.end()); } } return s; } };
本题用了一下库函数reverse反转字符串。本体主要是在for循环条件上做文章。因为本体题干有固定规律,实际上是抽象出一个固定规律的外层for循环和内层反转字符的for循环,在我的理解中算是快循环和慢循环的思路。因为外层循环的步数明显大于内层循环
替换空格
class Solution { public: string replaceSpace(string s) { int count = 0; int oldSize = s.size(); for(int m = 0; m < s.size(); m++){ if(s[m] == ' '){ count++; } } s.resize(s.size() + count * 2); for(int i = oldSize - 1, j = s.size() - 1; i < j; i--, j--){ if(s[i] != ' '){ s[j] = s[i]; }else{ s[j] = '0'; s[j - 1] = '2'; s[j - 2] = '%'; j -= 2; } } return s; } };
同样的双指针法,通过快慢指针的思想,先扩充字符串,再用一个慢指针扫描字符串,快指针从后往前更新新字符串。之前刷过类似的题所以比较好理解

浙公网安备 33010602011771号