簡體   English   中英

在小於 o(n^2) 的時間內使用常量空間交換 char* 中的兩個單詞

[英]Swap two words in a char* using constant space in less than o(n^2) time

給一個字符串的 char*,比如說包含“hellosir”,以及每個單詞的長度,如何在小於 o(n^2) 的時間內使用常量空間返回一個包含“sirhello”的 char* ? (我在技術面試中被問到這個問題)

函數簽名:

char* swapWords(char* str, int firstWordLen, int secondWordLen);

在“hellosir”示例中,firstWordLen 為 5,secondWordLen 為 3。

謝謝

char* swapWords(char* str, int firstWordLen, int secondWordLen) {
    char* newStr = (char*) malloc(sizeof(char) * (firstWordLen + secondWordLen + 1));
    for(int i = 0; i < secondWordLen; i++) {
        newStr[i] = str[firstWordLen + i];
    }
    for(int i = 0; i < firstWordLen; i++) {
        newStr[secondWordLen + i] = str[i];
    }
    newStr[firstWordLen + secondWordLen] = 0;
    return newStr;
}

解釋:

  • 循環第二個單詞,它從第一個單詞的末尾開始,所以 firstWordLen + i,並將字符放在新字符數組的開頭
  • 循環第一個單詞,因此從 0 到 firstWordLen 並將其放在先前放置的第二個單詞的末尾,因此在 secondWordLen + i
  • 由於空終止,將 0 添加到新字符數組的末尾

啊好吧,這不是常數空間我不好,速度是O(n),但空間也是O(n)

暫無
暫無

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

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