344.反转字符串
思路
两个指针向中间移动,反转字符串即可。
伪代码
遍历字符串两个指针分别指向开头及末尾交换开头及末尾元素
代码
void reverseString(string & s) {for(int i = 0, j = s.size()-1 ; i < s.size()/2 ; i ++ , j--){char temp = s[i];s[i]=s[j];s[j]=temp;}
}
541.反转字符串Ⅱ
思路
加更多的限制条件。理解起来就是以2k个步骤去遍历字符串,如果说2k个>字符串长度,则全部翻转;如果字符串长度>2k个,那么对每次遍历的区间字符串取前k个翻转。
其实还是边界条件没有搞清楚,例如,如果2k个后的字符串小于k个,此时的末尾元素需要作数吗?答案是需要。
伪代码
2k个遍历字符串if i+k <= 当前字符串长度只翻转到i到i+k的字符长度else翻转i到i+k的字符将剩余的元素全部反转
代码
void reverseString(string & s, int index , int k ) {int split = (2*index+k)/2;for(int j = index+k-1 ; index < split; index ++ , j-- ){char temp = s[index];s[index]=s[j];s[j]=temp;}
}string reverseStr(string &s, int k) {for(int i = 0 ; i < s.size() ; i=i+2*k){//如果下一个跳跃中够k个,则反转if (i+k <= s.size()){reverseString(s,i,k);}else{//将剩余的全部反转,剩余多少个元素?int final_k = s.size()-i;reverseString(s,i,final_k);}}return s;
}