日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

剑指offer之把字符串里面空格替换成百分之20[时间复杂度是O(n)]

發布時間:2023/12/4 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剑指offer之把字符串里面空格替换成百分之20[时间复杂度是O(n)] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 問題

把字符串里面空格替換成20%

要求:時間復雜度是O(n)

?

?

?

?

?

?

2 思路

比如我們字符串ab cd ef,我們先計算出新字符串需要的長度,我們分別搞2個指針指向老的和新的字符串的尾巴,然后老字符串從'\0'開始拷貝數據到新的字符串尾巴,同時兩個指針同時左移,如果老的字符串遇到了空格,那么老的字符串指針往左邊移動一格,然后新的字符串指針依然向左移動并且填充'0' 、'2'、 '%',直到老的字符串指針到最左邊或者老的字符串指針和新的字符串指針相等就不循環了

?

?

?

?

?

3 代碼實現

#include <stdio.h> #include <stdlib.h> #include <string.h> int insert(char *a, int len, char *replace, int replaceLen) {//先得到多少個空格char *p = a;//先得到多少個空格int count = 0;int oldLen = 0;while (*p != '\0'){if (*p == ' '){++count;}++p;++oldLen;}//計算新的字符串長度int newLen = oldLen + count * (replaceLen - 1);printf("oldLen is %d\n", oldLen);printf("newLen is %d\n", newLen);if (newLen > len){printf("數組的長度不夠\n");return -1;}//循環條件也就是需要移動的數組下標最左邊while (oldLen >= 0) //或加上while(oldLen >=0 && oldLen < newLen){//if (*(a + oldLen) != ' ')和下面的if等價if (a[oldLen] != ' '){//這里用這個和下面的等價/***(a + newLen) = *(a + oldLen);newLen--;oldLen--;**/a[newLen--] = a[oldLen--];}else {oldLen--;a[newLen--] = '0';a[newLen--] = '2';a[newLen--] = '%';}}return 0; }int main() {//這里給出數組的大小長度不能小于空格替換%20后//新的數組的長度,我們后面的函數需要做出處理char a[20] ="ab cd ef";int len = sizeof(a);int result = insert(a, len, "%20", 3);if (result != 0){printf("insert fail\n");return -1;}printf("chars is %s\n", a);printf("區分strlen和sizeof\n");char c[] = "abc";char d[3] = "abc";char e[4] = "abc";char *p = "abc";printf("sizeof(c) is %d\n", sizeof(c));printf("sizeof(d) is %d\n", sizeof(d));printf("sizeof(e) is %d\n", sizeof(e));printf("sizeof(p) is %d\n", sizeof(p));printf("strlen(c) is %d\n", strlen(c));printf("strlen(d) is %d\n", strlen(d));printf("strlen(e) is %d\n", strlen(e));printf("strlen(p) is %d\n", strlen(p));return 0; }

?

?

?

?

?

4 運行結果

oldLen is 8 newLen is 12 chars is ab%20cd%20ef 區分strlen和sizeof sizeof(c) is 4 sizeof(d) is 3 sizeof(e) is 4 sizeof(p) is 8 strlen(c) is 3 strlen(d) is 3 strlen(e) is 3 strlen(p) is 3

?

總結

以上是生活随笔為你收集整理的剑指offer之把字符串里面空格替换成百分之20[时间复杂度是O(n)]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。