【发布时间】:2013-12-13 16:03:22
【问题描述】:
String newStr;
public RandomCuriosity(String input){
newStr = input;
}
public void shiftChars(){
char[] oldChar = newStr.toCharArray();
char[] newChar = new char[oldChar.length];
newChar[0] = oldChar[oldChar.length-1];
for(int i = 1; i < oldChar.length; i++){
newChar[i] = oldChar[i-1];
}
newStr = String.valueOf(newChar);
}
我创建了一种将字符向前移动一个的方法。例如,输入可能是:
输入:Stackoverflow
输出:wStackoverflo
我是怎么做到的,我改变了一个字符串的实例。将该字符串转换为char 数组(称其为oldChar),将oldChar 的最后一个索引分配为newChar 的第一个索引,并创建一个取oldChar 的第一个索引的for 循环作为我的新 Char 数组的第二个索引,依此类推。最后,我将 char 数组转换回字符串。
我觉得我做的事情太多了,非常简单。有没有更有效的方法来做这样的事情?
编辑感谢您的精彩回答!
【问题讨论】:
-
你的程序的时间和空间复杂度是多少?
-
我不知道,虽然我认为它相当高。
-
这似乎是题外话,因为它应该在:codereview.stackexchange.com
-
@SotiriosDelimanolis 子字符串解决方案实际上更快吗?我不知道子字符串是否产生 O(1)?如果我没记错的话,较新版本的 java 不再保留偏移量。
-
作为术语的旁注:您没有改变 String 的实例。您创建了一个具有相似但更改了值的新字符串。字符串是不可变的。