基本資料結構與演算法 之字串

2021-06-18 18:41:27 字數 1982 閱讀 8614

1. 判斷乙個字串中是否全部字元都是唯一的,不允許使用額外的資料結構。

額外的資料結構?是否允許使用常量的陣列?

如果可以,則使用256長度的bool陣列記錄對應字元出現與否,時間複雜度o(n)。

如果不可以,則時間複雜度o(n^2)。

2. 反轉字串。

void reversestring(char *str)

}

3. 移除字串中重複出現的字元,不允許使用額外的緩衝區。

如果使用常數的緩衝區,可使用256長度的陣列記錄每個字元的出現情況。時間複雜度o(n)。

否則,時間複雜度o(n^2)。

用tail記錄當前已經去重的字串長度。

遍歷字串中的每個字元,與已經去重的字串中的每個字元比較。

4. 判斷兩個字串是否包含同樣的字元,但是順序可能不同。

兩者排序,看是否相等。

用256長度的陣列記錄兩個字串中各個字元出現的次數,看是否相同。

5. 用%20這三個代替字串中的空格。

統計空格個數,計算新字串的長度。

從右往左遍歷原來的字串,將空格替換成%20。

時間複雜度為o(n)。

6. 利用substr函式判斷乙個字串s1是否是另乙個字串s2的移位結果。

看s1是否為s2s3的substr。

7. 實現strcpy

使用strcpy時,需要考慮一些條件:dest字串申請的空間是否能夠放下source和\0;source結尾是否有\0。

如果任何乙個不滿足,則呼叫strcpy會出錯。

char* strcpy(char *dest, const char *source)

*dest = '\0';// 目標字串末尾一定要加\0

return ret;

}

8. 實現atoi

全面的考慮字串可能出現的情況。

前導0,正負號(正號可以省略),若干數字字元,若干非數字字元,超出整數範圍(中間儲存當前數值的變數突然變成了負數,表示超出了整數範圍)。

9. 實現strstr

用s1+i與s2比較,看s2是否為s1+i的字首,如果是說明s2是s1的子串。

10. 實現itoa

首先,記錄正負號。

然後,從整數的最低位開始切分,存入字串。

最後將字串逆序並加上符號。

注意,字串末尾加上\0。

11. 實現strcat

掃瞄s1到\0,掃瞄s2到\0同時將s2的內容新增到s1,最後在s1結尾加上\0。

12. 實現strchr

掃瞄s,判斷*s是否等於c。

13. 實現strcmp

依次比較s1和s2中的對應字元,如果*s1<*s2返回-1,如果*s1>*s2返回1,否則繼續向後比較。

14. 實現strlen

遍歷s,直到\0。

15. 找字串的最長無重複字元的子串。

char *findlongestsubstrwithnoduplication(char *s)

if(cur-start > maxlen)// 從s[start]到s[cur-1]是無重複字元的子串,長度為cur-start

if(cur == n)

else

}char *substr = new char[maxlen+1];

int i;

for(i=0;i

基本資料結構與演算法 之陣列

1.mxn的矩陣,若某個元素值為0,則將其所在的行和列全置為0。定義行陣列rows,列陣列cols。如果a i j 為0,則將rows i 和cols j 置為true。當遍歷完整個a陣列後,根據rows和cols的值對矩陣進行修改。2.陣列a,將a 0 a p 和a p 1 a n 1 這兩段交換...

資料結構演算法之字串

字串是由若干個字元組成,在c c 中常常使用 0 字元作為結尾,這樣很方便的為我們查詢到字串的最後乙個字元。為了節省空間,c c 常常將字串單獨放到乙個記憶體空間中,當幾個指標賦予相同的變數時,實際上他們會指向相同的位址空間 實現乙個函式將字串中的空格替換成 20 實現方式 方式一 如果是建立新的字...

資料結構與演算法 字串

判斷乙個串是不是回文串,往往要分開編寫,造成 的拖沓 int longestpalindrome const char s,int n return max void longestpalindrome test 上面的迴圈中,對於回文長度本身的奇偶性,我們進行區別處理。這樣有點拖沓。我們根據乙個簡...