我写了一个执行此操作的函数,它可以工作;但是,我对我的功能的时间复杂性有点不确定。我觉得它效率很低,但我不确定它是否只是问题的本质。我想象有一种更好的方法可以做到这一点,而不是我这样做。我最初的想法是,这将是O(n ^ 2)时间复杂度,但我认为它可能实际上是最差的,因为我使用的分割功能。有什么更好的方法可以做到这一点?另外,我是否认为这实际上比O(n ^ 2)更差?
public static String wordReverse(String string){
//Split the string into an array such that each word is an element in the array
String[] arr = string.split(" ");
String result = "";
//Iterate throught the elements in the array
for(String value : arr){
String word = "";
//Reverse the letters of the element, and append them to a temp string
for(int i = value.length(); i > 0; i--){
word += value.charAt(i-1);
}
//Build the result string
result += word += " ";
}
//Return result string
return(result);
}
答案 0 :(得分:0)
O(n ^ 2)你并不差。实际上,你是O(n)。
split()是O(n),因为它传递了一次数组。
你反过来也是O(n),因为它会检查所有字符。
最糟糕的是连接是O(n)。
答案 1 :(得分:0)
您的方法的复杂性是O(n) - 线性时间。时间随着单词和字符的数量线性增加。