算法题目3 - 给定一个字符串,请输出其反转字符串
1. 问题描述
给定一个字符串,输出其反转后的字符串。
例如:
String str = "Hello";
输出:
olleH
以下介绍双指针法和库函数发实现。
2. 算法解决
2.1 双指针法
维护左、右两个指针,依次循环交换值,代码如下:
/**
* 题目:反转字符串
* 给定一个字符串,返回改字符串的反转字符串,例如 "Hello" -> "olleH"
* 双指针法 时间复杂度 O(n)
* @param str
* @return
*/
public static String reverseStr1(String str) {
// 转换为字符数组
char[] charArray = str.toCharArray();
// 左指针
int left = 0;
// 右指针
int right = charArray.length - 1;
while (left < right) {
// 左右数据交换
char tempChar = charArray[left];
charArray[left] = charArray[right];
charArray[right] = tempChar;
left++;
right--;
}
return new String(charArray);
}
2.2 库函数法
直接利用当前项目包中的第三方库函数或工具类求解:
/**
* 题目:反转字符串
* 给定一个字符串,返回改字符串的反转字符串,例如 "Hello" -> "olleH"
* 使用库函数 时间复杂度 O(n)
* @param str
* @return
*/
public static void reverseStr2(String str) {
// StringBuilder的函数 reverse()
String reverse1 = new StringBuilder(str).reverse().toString();
System.out.println("反转字符串,使用库函数-StringBuilder:" + reverse1);
// hutool 工具类
// String reverse2 = StrUtil.reverse(str);
//System.out.println("反转字符串,使用hutool工具类:" + reverse2);
}
3. 测试
调用测试:
public class ReverseStrTest {
public static void main(String[] args) {
String str = "Hello";
String reverseStr1 = reverseStr1(str);
System.out.println("双指针法反转字符串:" + reverseStr1);
System.out.println("========================");
reverseStr2(str);
}
}
打印结果:
4. 总结
方法 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
双指针法 | 显式展示算法逻辑,面试常用 | 代码量稍多 | 面试、算法题 |
库函数法 | 代码简洁,高效 | 隐藏实现细节 | 实际开发、快速实现需求 |