给定一个string iniString,请返回一个string,为该字符串翻转后的结果。要求不使用额外数据结构和储存空间,可以使用单个过程变量,保证字符串的长度小于等于5000。
测试样例:
"This is nowcoder"
返回:"redocwon si sihT"
package june.code.byhehe.book.GoldBook; import java.util.Scanner; public class CM2StrReverse { public static void main(String[] args) { Scanner sc = new Scanner(System.in); StrReverse sr = new StrReverse(); String iniString = sc.nextLine(); while (sc.hasNext()){ System.out.println(sr.reverseString(iniString)); } } } class StrReverse{ // 方法一、 使用 StringBuilder 进行翻转 public String reverseString(String iniString) { // write code here StringBuilder sb = new StringBuilder(iniString); return sb.reverse().toString(); } // 方法二、使用 char 数组 进行翻转 public String reverseString2(String iniString) { char[] chars = iniString.toCharArray(); int left = 0, right = chars.length-1; while (left < right){ char temp = chars[right]; chars[right] = chars[left]; chars[left] = temp; left++; right--; } return chars.toString(); } // 使用 二分法 进行反转 不断二分直至 最小 public String reverseString3(String s) { int length = s.length(); if(length <= 1) return s; // 分割成两部分 String left = s.substring(0, length/2); String right = s.substring(length/2, length); // 顺序不能颠倒 右 + 左 return reverseString3(right) + reverseString3(left); } }
class Reverse: def reverseString(self, iniString): # write code here return iniString[::-1]
public String reverseString(String iniString) { char temp; int length = iniString.length(); int mid = length / 2; char[] arr = iniString.toCharArray(); for (int i = 0; i < length; i++) { if (i < mid) { //exchange temp = arr[i]; arr[i] = arr[length - 1 - i]; arr[length - 1 - i] = temp; } else break; } return String.valueOf(arr); }思路就是首尾交换,循环一半,时间复杂度n/2
import java.util.*; public class Reverse { public String reverseString(String iniString) { // write code here char res[] = new char[iniString.length()]; for (int i = 0; i < iniString.length(); i++) { res[i] = iniString.charAt(iniString.length() - 1 - i); } return String.copyValueOf(res); } }
递归
public static String reverseString(String iniString) {
// write code here
if ("".equals(iniString)){
return "";
}
String lastString = iniString.substring(iniString.length() - 1);
return lastString + reverseString(iniString.substring(0,iniString.length() - 1));
}
public class Reverse { public static void main(String[] args) { System.out.println(reverseString("linhongcun")); } public static String reverseString(String iniString) { StringBuilder string = new StringBuilder(); for (int i = 0; i < iniString.length(); i++) { string.append(iniString.charAt(iniString.length()-i-1)); } return string.toString(); } }倒装