字串翻轉 要求空間複雜度為O 1

2021-07-27 10:04:16 字數 948 閱讀 7563

1.特例:全部翻轉

比如:goodboy 翻轉以後為:yobdoog

思路:就是取得字串的長度length,然後用乙個臨時變數做中轉兩兩交換,就是0和最後乙個交換,1和倒數第二個交換,依次類推

2.通例:把尾部的n個字元移到字串的頭部

思路:也是用到了兩兩交換的方法

比如說:要把尾部的3個字元移到頭部,先把length-3-1=3,就是索引從0到3的子字串翻轉;然後再把索引是3+1=4到length-1=6的子字串翻轉,最後整體翻轉即可

上**

private

static string reserve(string test, int

index)

private

static

void turnover(char chars, int begine, int

to)

}}private

static

void swap(char chars, int begine, int

to)

3.根據某個特定字元進行翻轉

比如goodbye 根據d翻轉  結果為:yebgood

思路:特定字元左邊的子字串翻轉,右邊的子字串也翻轉,最後整體翻轉

上**:

//根據某乙個特定的字元進行翻轉

private

static string reserve(string test, char

index)

}if(to < chars.length - 1)

turnover(chars,0,chars.length-1);

return

newstring(chars);

}

注意這個方法也可以 吧  i am a student.按空格進行翻轉

實現鍊錶逆序,空間複雜度為O(1)

乙個演算法的空間複雜度只考慮在執行過程中為區域性變數分配的儲存空間的大小,它包括為參數列中形參變數分配的儲存空間和為在函式體中定義的區域性變數分配的儲存空間兩個部分。include using namespace std struct linknode linknode reverselink li...

最小棧O 1 空間複雜度實現

設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。常見的一道題目,很多解答都是兩個棧的做法,這裡提供一下o 1 空間複雜度的做法。使用兩個棧的原因是,我...

合併兩個有序的子序,要求空間複雜度為O 1

陣列al 0,mid 1 和al mid,num 1 是各自有序的,對陣列al 0,num 1 的兩個子有序段進行merge,得到al 0,num 1 整體有序。要求空間複雜度為o 1 注 al i 元素是支援 先是琢磨良久,是否可能時間複雜度為o n 因為這讓我想起了,左旋轉陣列的相關的演算法。深...