输入:“我的名字是Pritam” 输出:“Pritam is Name My”
到目前为止我已写过这篇文章,但我对时间复杂度感到困惑
public string ReverseWordsInAString(string str)
{
char[] temp = str.ToCharArray();
int startIndex = 0;
int endIndex = str.Length - 1;
temp = ReverseString(temp, startIndex, endIndex);
endIndex = 0;
foreach (char c in temp)
{
if(c == ' ')
{
temp = ReverseString(temp, startIndex, endIndex-1);
startIndex = endIndex + 1;
}
if (endIndex == str.Length-1)
{
temp = ReverseString(temp, startIndex, endIndex);
}
endIndex++;
}
str = new string(temp);
return str;
}
public char[] ReverseString(char[] chr, int start, int end)
{
while (start < end)
{
char temp = chr[start];
chr[start] = chr[end];
chr[end] = temp;
start++;
end--;
}
return chr;
}
当我从for循环调用ReverseString方法时,我认为它不再是O(n)解决方案。如果我错了,请纠正我。有没有人有更好的解决方案。
答案 0 :(得分:2)
String str= "My Name is Pritam";
String arr[] = str.split(" ");
for(int i = arr.length-1 ; i >=0 ; i--){
System.out.println(arr[i]);
}
答案 1 :(得分:2)
您的代码为O(n)
。您可以通过查看每个元素所涉及的交换次数来看到这一点,即 2 (一次用于整个字符串的初始反转,第二次用于逐字反转)。此外,foreach
循环仅对每个元素进行一次迭代。
答案 2 :(得分:1)
在Ruby中:
sentence = "My name is Pritam"
print sentence.split(" ").reverse.join(" ")
答案 3 :(得分:0)
在C;
char *s = "My Name is Pritam", *t = s + strlen(s), *end = strchr(s,' ')-1;
while( t != end )
{
*(t = strrchr(t,' ')) = '\0';
printf( "%s ", --t+2 );
}
printf( "%s", s );
答案 4 :(得分:0)
可能重复,我曾经问过类似的问题。但我收到的回复非常有趣,实际上确实改变了应该考虑复杂性的方式;).... Time Complexity
答案 5 :(得分:0)
拆分字符串并将其推入堆栈。从堆栈弹出元素并将其添加到新字符串。需要额外的空间,但刚刚发布,因为它可能是实现字符串反转的简单方法
public class StringReverse {
public static void main (String args[]){
String input = "My name is Pritam";
Stack<String> stack = new Stack<String>();
String[] strings= input.split(" ");
for(String str :strings){
stack.push(str);
}
String reverse = "" ;
while(!stack.isEmpty()){
reverse = reverse + " " + stack.pop();
}
System.out.println(reverse);
}
}
答案 6 :(得分:0)
在Python中,
sentence = "My name is Pritam"
' '.join(sentence.split(" ")[::-1])