Java如何通过双指针算法反转字符串
题目:编写一个函数,将输入的字符串反转,输入字符串以字符数组的形式给出。约束:算法不可使用额外空间,即原地进行,空间复杂度为O(1)。
算法思想
该算法采用双指针的思想。首先声明两个索引指针,一个指向字符数组的首部,一个指向字符数组的尾部。然后交换这两个指针所指向的字符,继续向内移动指针,直到前一个索引位置等于或越过后一个索引位置。
编写测试代码
为了验证算法的正确性,我们需要编写一些测试代码。首先,我们可以创建一个字符数组作为输入字符串,并打印出反转前的字符串。然后,调用反转函数,将字符数组反转。最后,再次打印出反转后的字符串。
```java
public class Main {
public static void main(String[] args) {
char[] str {'h', 'e', 'l', 'l', 'o'};
("反转前的字符串:" new String(str));
reverseString(str);
("反转后的字符串:" new String(str));
}
public static void reverseString(char[] s) {
int left 0;
int right s.length - 1;
while (left < right) {
char temp s[left];
s[left] s[right];
s[right] temp;
left ;
right--;
}
}
}
```
运行测试代码
编译并运行上述测试代码,观察控制台输出结果是否与预期一致。如果反转前的字符串为"hello",则预期输出的反转后的字符串应为"olleh"。
平台提交算法
在本地测试通过后,可以将算法提交到相应的平台上进行进一步的测试。确保算法在各种情况下都能正常工作。
算法复杂度分析
该算法只需遍历一遍字符数组,时间复杂度为O(n),n为字符数组的长度,即字符串的长度。整个算法没有借助额外空间,原地操作,因此空间复杂度为O(1)。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。