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

2019-01-10  本文已影响0人  六十年目裁判长亚玛萨那度

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

难度:水

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串,运行时间增加

上一篇 下一篇

猜你喜欢

热点阅读