编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[]
的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例 1:
示例 2:
O(1) 的额外空间解决:
class Solution {
public void reverseString(char[] s) {
if(s==null||s.length==0) {
return;
}
int start = 0;
int end = s.length-1;
while(start<end) {
char temp = s[start];
s[start]=s[end];
s[end]=temp;
start++;
end--;
}
}
}
需要额外空间解决实现:
package com.billkang.algorithm;
/**
* 字符串反转
*
* @author Kangbin
* @date 2018-11-17
*/
public class StrReverse {
/**
* 1.通过stringbuilder的reverse方法
*
* @param str
* @return
*/
public String reverse1(String str) {
StringBuilder stb = new StringBuilder(str);
return stb.reverse().toString();
}
/**
* 2. 将str里的字符从后向前累加
*
* @param str
* @return
*/
public String reverse2(String str) {
StringBuilder stb = new StringBuilder();
for (int i = str.length()-1; i >= 0; i--) {
stb.append(str.charAt(i));
}
return stb.toString();
}
/**
* 3. 递归
*
* @param str
* @return
*/
public String reverse3(String str) {
int length = str.length();
if (length <= 1) {
return str;
}
String left = str.substring(0, length / 2);
String right = str.substring(length / 2, length);
return reverse3(right) + reverse3(left);
}
public static void main(String[] args) {
System.out.println(new StrReverse().reverse1("abcdefg"));
System.out.println(new StrReverse().reverse2("abcdefg"));
System.out.println(new StrReverse().reverse3("abcdefg"));
}
}