【发布时间】:2016-02-21 21:52:27
【问题描述】:
我被要求解决以下低于 N^2 时间复杂度和 O(N) 空间复杂度的问题:
为以下情况编写程序反转字符串:
输入:- “Hello World” 输出:-“olleH dlroW”
我已经尝试了很多,但是无论我尝试什么,我都无法提出低于 N^2 的时间复杂度,我的代码可以在下面看到,你有什么建议我该怎么做想出一个线性时间的解决方案?
注意:不允许使用内置方法
public static String stringReverser(String str) {
if (str == null || str.isEmpty()) {
throw new IllegalArgumentException();
}
if (str.length() < 2) {
return str;
}
String[] strArr = str.split(" ");
StringBuffer newHolder = new StringBuffer();
for (int i = 0; i < strArr.length; i++) {
int j = 0;
int len = strArr[i].length();
char[] newCharStr = strArr[i].toCharArray();
while (j < len) {
char temp = newCharStr[j];
newCharStr[j] = newCharStr[len - 1];
newCharStr[len - 1] = temp;
len--;
j++;
}
newHolder.append(String.valueOf(newCharStr));
if(i != strArr.length-1){
newHolder.append(" ");
}
}
return newHolder.toString();
}
【问题讨论】:
-
return new StringBuilder(str).reverse().toString(); -
这是一道算法题,不允许使用内置方法
标签: java string algorithm reverse swap