本文主要是介绍代码随想录训练营第七天 344反转字符串 541反转字符串II 替换数字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第一题:
原题链接:344. 反转字符串 - 力扣(LeetCode)
思路:
双指针,一根指向字符串的头部,一根指向字符串的尾部。两个指针向中间移动,交换两根指针指向的值。
代码如下:
class Solution {
public:void reverseString(vector<char>& s) {for(int i = 0, j = s.size() - 1; i < j; i++, j--){swap(s[i], s[j]);}return;}
};
第二题:
原题链接:541. 反转字符串 II - 力扣(LeetCode)
思路:
题目要求的是遍历到2k个字符然后反转2k字符的前k个字符。
于是我们遍历的时候直接i += 2 * k。这样我们就直接指向要反转的第一个元素。然后判断i + k是否超过了边界,如果没有超过直接反转前k个元素即可,若超过了就反转剩下的元素。
代码如下:
class Solution {
public:string reverseStr(string s, int k) {for(int i = 0; i < s.size(); i+=2 * k){if(i + k <= s.size()){for(int m = i, n = i + k - 1; m < n; m++, n--){swap(s[m], s[n]);}}else{for(int m = i, n = s.size() - 1; m < n; m++, n--){swap(s[m], s[n]);}}}return s;}
};
反转可以用reverse(s.begin() + i, s.begin() + i + k);
第三题:
原题链接54. 替换数字(第八期模拟笔试) (kamacoder.com)
思路:
先找出这个字符串中出现数字的个数,然后乘5,然后将字符串扩容。
然后从末尾遍历将字符填入对应的位置。
这篇关于代码随想录训练营第七天 344反转字符串 541反转字符串II 替换数字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!