自己做交易网站吗,东莞常平医院,做网站找哪家,烟台开发区网站今天#xff0c;带来字符串相关算法的讲解。文中不足错漏之处望请斧正#xff01;
理论基础点这里 1. 反转字符串
题意简化
题意已经很简洁。
题意转化
将字符串的顺序倒转。
解决思路(抽象)
这道题的反转可以直接调用一个库函数#xff0c;但是这样做意义不大。
能…今天带来字符串相关算法的讲解。文中不足错漏之处望请斧正
理论基础点这里 1. 反转字符串
题意简化
题意已经很简洁。
题意转化
将字符串的顺序倒转。
解决思路(抽象)
这道题的反转可以直接调用一个库函数但是这样做意义不大。
能直接用库函数秒的题就自己写只有部分功能用库函数实现并且对库函数了解了就可以调用库函数
解决思路从两边向中间两两交换字符。
编程实现(具体)
class Solution {
public:void reverseString(vectorchar s) {int left 0, right s.size() - 1;while (left right) swap(s[left], s[right--]);}
};2. 反转字符串2
题意简化
题意足够简洁 给定一个字符串 s 和一个整数 k从字符串开头算起每计数至 2k 个字符就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个则反转前 k 个字符其余字符保持原样。
题意转化
用变量计数到2k时区间内如果
够k个就反转[i, i k] 每2k个字符反转前k个k 剩余字符 2k反转前k个 不够k个就把剩下都全部反转[i, end()]
解决思路(抽象)
直接按照转化的题意写出代码即可。
编程实现(具体)
暴力写法
class Solution {
public:string reverseStr(string s, int k) {int count 0, begin 0;for (int i 0; i s.size(); i) {count;if (count 2 * k) {myReverse(begin, begin k - 1, s); // 每次反转k个, 反转区间: [begin, begin k - 1]begin i 1;count 0;}}if (count k) myReverse(begin, s.size() - 1, s);else if (count k count 2 * k) myReverse(begin, begin k - 1, s);return s;}
private:void myReverse(int begin, int end, string s) {while (begin end) swap(s[begin], s[end--]);}
};简介写法
class Solution {
public:string reverseStr(string s, int k) {for (int i 0; i s.size(); i 2 * k) { // i每次递增2k相当于计数到2k// 够k个就反转if (i k s.size()) reverse(s.begin() i, s.begin() i k);// 不够k个就全部反转else reverse(s.begin() i, s.end());}return s;}
};今天的分享就到这里了感谢您能看到这里。
这里是培根的blog期待与你共同进步