345. 反转字符串中的元音字母

题目描述:编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

难度:水

int find(char ch) {
    if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
        return 1;
    }
    if (ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U') {
        return 1;
    }
    return 0;
}

char* reverseVowels(char* s) {
    int len = -1;
    for (int i = 0; s[i]; i++) {
        if (find(s[i]) == 1) len += 1;
    }
   
    char *arr = (char *)calloc(len + 5, sizeof(char));
    
    int cnt = 0;
    int i = 0;
    for (; s[i]; i++) {
        if (find(s[i]) == 1) arr[cnt++] = s[i];
    }
    int j = 0;
    while (i >= 0 && cnt >= j) {
        if (find(s[i]) == 1) {
            s[i] = arr[j++];
        }
        i -= 1;
    } 
    
    // printf("%d\n", i);
    free(arr);
    return s;
}

在申请arr临时字符串的大小上有两种考虑:
1.直接申请s串的大小,空间开的多,消耗内存多,但是会变快
2.遍历一下s串,先查看有多少元音字母,再申请,这样要多遍历一遍s串,运行时间增加

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。