持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
今天,我们继续搞算法。
题目描述
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
题目分析
这个题目是让我们反转字符串,我们如果不知道怎么设计的话,可以看例子,例子里是:输入: s = ["h","e","l","l","o"],然后输出就是最后一个位置的跑到第一个位置,倒数第二个位置跑到第二个位置,到中间就停止,结束程序。
那既然是位置移动,我们最容易想到的是互换模板,a和b互换,怎么换呢?我们需要把a保存,然后把b的值给a,a的值就是b,这就是为什么我们还要把a进行保存,不保存的话就覆盖了,然后再把保存的值给b。
解题思路
- 确定操作对象:本题中,操作数组就1个char[] s
- 确定操作条件:遍历一半就返回。
- 确定操作过程:将倒数第1个位置的字符与正数第一个字符互换位置,然后两个指针同时移动。
- 确定结果返回:无返回。
代码
class Solution {
public void reverseString(char[] s) {
int cmt = s.length-1;
int count = s.length/2;
for (int i =0;i<s.length;i++){
char temp = s[i];
s[i] = s[cmt];
s[cmt] =temp;
if(i == count-1){
return;
}
cmt--;
}
}
}
总结
这是一道简单题目,我觉得题目本身不是很难,而且也比较容易想,关键是在设计算法的时候要考虑清楚情况,最好是结合几个例子,就可以写出来了。