2024/4/6—力扣—简化路径


代码实现:

// 分割'/'得到名字
char **split(const char *s, int *returnSize) {
    int n = strlen(s);
    char **ans = (char **)malloc(sizeof(char *) * n);
    int l = 0, r = 0, len = 0;
    while (r < n) {
        while (r < n && s[r] == '/') {
            r++;
        }
        l = r;
        while (r < n && s[r] != '/') {
            r++;
        }
        if (l < n) {
            ans[len] = (char*)malloc(sizeof(char) * (r - l + 1)); 
            strncpy(ans[len], s + l, r - l);
            ans[len][r - l] = '\0';
            len++;
        }
    }
    *returnSize = len;
    return ans;
}

char *simplifyPath(char *path){
    int namesSize = 0;
    int n = strlen(path);
    char **names = split(path, &namesSize);
    char **stack = (char**)malloc(sizeof(char*) * namesSize);
    int top = -1;

    for (int i = 0; i < namesSize; ++i) {
        if (!strcmp(names[i], "..")) { // 遇到".."
            if (top > -1) {
                top--;
            }
        } else if (!strcmp(names[i], ".")) { // 遇到"." 跳过
            continue;
        } else {
            if (top == -1 || strcmp(stack[top], names[i])) { // 遇到目录名
               stack[++top] = names[i];
            }
        }
    }
    char *ans = (char*)malloc(sizeof(char) * (n + 1));
    int ind = 0;
    if (top == -1) {
        ans[ind] = '/';
        ind++;
    } else {
        for (int i = 0; i <= top; i++) {
            ans[ind++] = '/';
            strcpy(ans + ind, stack[i]);
            ind += strlen(stack[i]);
        }
    }
    ans[ind] = '\0';
    for (int i = 0; i < namesSize; i++) {
        free(names[i]);
    }
    free(names);
    free(stack);
    return ans;
}

相关推荐

  1. -简化路径

    2024-04-12 00:14:05       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-12 00:14:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-12 00:14:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-12 00:14:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-12 00:14:05       20 阅读

热门阅读

  1. Week6-LeetCode

    2024-04-12 00:14:05       16 阅读
  2. std::vector的核心框架接口的模拟实现bit::vector

    2024-04-12 00:14:05       12 阅读
  3. mysql学习笔记NO.2

    2024-04-12 00:14:05       15 阅读
  4. C# AOP最经典实现

    2024-04-12 00:14:05       12 阅读
  5. Terraform 通过 Provisioner 配置服务器

    2024-04-12 00:14:05       14 阅读
  6. 并发编程中常见的设计模式

    2024-04-12 00:14:05       16 阅读
  7. 比武中的一段PHP代码

    2024-04-12 00:14:05       17 阅读
  8. Vue3+elementPlus组件递归

    2024-04-12 00:14:05       16 阅读
  9. Vue 3 组合式 API:优化代码的利器

    2024-04-12 00:14:05       15 阅读
  10. JQuery

    2024-04-12 00:14:05       14 阅读