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 上面的迴圈中,對於回文長度本身的奇偶性,我們進行區別處理。這樣有點拖沓。我們根據乙個簡...