筆試題集合 字串問題

2022-08-31 09:36:10 字數 1045 閱讀 5434

1. 實現字串移位操作,要求時間複雜度為o(n),空間複雜度為o(1)。

思路:由於空間複雜度為o(1),可以知道移位操作只在原字串上面完成。

假設c1 c2 c3 c4 ... ci-1, ci, ci+1 ... cn字串,low=1,high=n,shift=i,需要移位的字串長度為high-low+1;

向左移位i位時,有三種情況:

1)當i>n-i時,將c[1...n-i]與c[i+1...n]進行對調,此時c[i+1...n]到達正確位置,修改low=n-i+1,shift=(high-low+1)-2*(n-i);

2)當i=n-i時,將c[1...i]與c[i+1...n]進行對調,此時剛好完成移位,退出移位迴圈體;

3)當i比如有字串「abcdefghi」左移7位的順序如下:

第一步:「」的low=1,high=9,i=7,因為i>high-i,所以對調c[1...high-i]和c[i+1...high],得到「hi」,low=high-i+1=3,i=(high-low+1)-2*(high-low+1-i)=5;

第二步:類似於第一步,得到「hiab」,low=high-i+1=5,i=(high-low+1)-2*(high-low+1-i)=3;

往後繼續可得「hiabcd","hiabcdg",」hiabcdefg"結束。

#include #include #include void swap(char *a, char *b)

void shift_str(char *s, int n)

leftweiyichar(str, length-k, k);

return cnt;

}

使用了遞迴,**顯得非常簡潔。

但是,這裡可能與題目條件空間複雜度o(1)產生衝突。因為,遞迴呼叫函式是需要壓棧的,在這裡可以加入static int cnt來記錄遞迴的次數進行測試;同樣我們來分析最好情況和最壞的情況:最好情況是函式只執行一次,就是在k%length==0直接返回;最壞的情況需要遞迴n-1次(移一位的情況下)。所以在移位位數概率一致的情況下,平均空間複雜度為n/2,即o(n)。

字串筆試題

1 輸入乙個整數的字串,把該字串轉換成整數並輸出。例如輸入字串 345 則輸出整數345 思路 依次掃瞄字串,每掃到乙個字元,把之前的得到的數字乘以10再加上當前字元表示的數字。注意 還可能包括 或 表示整數的正負。需要特殊處理 考慮非法輸入 1 判斷指標是否為空 2 輸入的字串可能不是數字的字元,...

陣列字串,企業筆試題

1.輸入整數,輸出字串 include include include define max size 10 int main printf number is d n num return 0 1.輸入字串 輸出其中數字的個數 include include define max size 100...

有關字串的筆試題

小總結 1.轉換字串格式為原來字串裡的字元 該字元連續出現的個數 1233422222轉換為1121324125 思路 兩個vector來存放,乙個存放字元,乙個存放次數 void printchte string str mytime.push back time mychar.push back...