344.反转字符串
建议: 本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么时候 不用库函数
题目链接/文章讲解/视频讲解:https://programmercarl.com/0344.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2.html
代码如下
while循环实现
void reverseString(char* s, int sSize){
int left = 0 ;
int right = sSize-1;
char tmp ;
while(left < right){
tmp = s[left];
s[left]= s[right] ;
s[right] = tmp ;
left++ ;
right-- ;
}
}
for循环实现
void reverseString(char* s, int sSize){
for(int left = 0 , right = sSize-1 ; left < right ; right-- , left++){
char tmp ;
tmp = s[left] ;
s[left] = s[right] ;
s[right] = tmp ;
}
}
感想:这题不是很难
541. 反转字符串II
建议:本题又进阶了,自己先去独立做一做,然后在看题解,对代码技巧会有很深的体会。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0541.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2II.html
代码如下
void reverse(char* s,int left,int right){
for(int i=left,j=right;i<j;i++,j--){
char tmp=s[i];
s[i]=s[j];
s[j]=tmp;
}
}
char * reverseStr(char * s, int k){
int len = strlen(s);
if(len<k){
reverse(s,0,len-1);
return s ;
}else if(len >=k && len<2*k){
reverse(s,0,k-1);
return s ;
}
for(int i=0;i<len;i+=(2*k)){
if((i+k)<=len){
reverse(s,i,i+k-1);
}
else{
reverse(s,i,len-1);
}
}
return s;
}
感想:理解这道题的题意花了一点时间,理解了题意
剑指Offer 05.替换空格
建议:对于线性数据结构,填充或者删除,后序处理会高效的多。好好体会一下。
题目链接/文章讲解:https://programmercarl.com/%E5%89%91%E6%8C%87Offer05.%E6%9B%BF%E6%8D%A2%E7%A9%BA%E6%A0%BC.html
151.翻转字符串里的单词
建议:这道题目基本把 刚刚做过的字符串操作 都覆盖了,不过就算知道解题思路,本题代码并不容易写,要多练一练。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0151.%E7%BF%BB%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E7%9A%84%E5%8D%95%E8%AF%8D.html
剑指Offer58-II.左旋转字符串
建议:题解中的解法如果没接触过的话,应该会想不到