簡體   English   中英

當它在整個句子上調用反向然后在每個單詞上反向時,如何解決句子O(N)中的反向單詞?

[英]How is this solution to reversing words in a sentence O(N) when it calls reverse on the whole sentence and then reverse on each word?

http://www.geeksforgeeks.org/reverse-words-in-a-given-string/

當它在整個句子上調用反向然后在每個單詞上反向時,如何解決句子O(N)中的反向單詞?

N =整個弦的長度M =每個弦的長度

不是O(N)+ O(N * M)嗎? 用M表示字符串的長度是否正確,因為每個輸入的M可以不同?

您正在重用N來表示兩種不同的含義。 確實應該有三個變量:

  • N是整個字符串的長度
  • M是字符串中的單詞數
  • O是每個單詞的(平均)長度

然后,您的整個算法將在O(N + M*O) 但是, M*O總是小於N ,因為字符串是由單詞和分隔它們的空格組成的。 因此,您可以將整個事情簡化為O(N)

如果您使用N作為整個字符串的長度,那么您不應該使用N * M來表示每個單詞的反轉,它只是N,因為您要遍歷整個字符串本身兩次:一次反轉它,一次反轉單個單詞。

編輯:如果給定了一個字符串列表,並且您想要反轉列表的順序,然后反轉字符串本身,那么它將是O(N)+ O(L * M),其中N是數字數組中元素的個數,M是單詞的長度,因為數組與單詞是分開的。 您可以反轉數組的順序而無需反轉單詞,因此這是與單詞分開的計算。 反轉單詞時,它是單詞的長度乘以您要反轉的單詞數。

查看代碼的作用:

  1. 它掃描整個句子(N個字符)以查找單詞邊界。
  2. 對於每個單詞,它都會顛倒單詞。 反向功能對單詞中的W個字符循環W / 2次。
  3. 最后,它反轉整個字符串(N / 2個循環)。

棘手的部分是單詞的反轉。 由於單詞都是同一句子的一部分,因此您可以將它們視為整個句子的另一遍歷。

這使得:

  1. 上)
  2. 上)
  3. 上)

所以整個事情就是O(3n),也就是O(n)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM