题解 | #单词倒排#

单词倒排

https://www.nowcoder.com/practice/81544a4989df4109b33c2d65037c5836

一种思路:时间复杂度,空间复杂度

#include 
#include 
#include 
//逆置相应段的元素
void reverse(char* str, int left, int right) {
    while (left < right) {
        char tmp = str[left];
        str[left] = str[right];
        str[right] = tmp;
        ++left;
        --right;
    }
}
int main() {
    char str[10000];
    gets(str);
    //数组长度
    int len = strlen(str);
    //清理多余非字母字符
    int slow = 0, fast = 0;
    //flag默认为1,表示空格已经被记录,直到出现新单词才变0,表示需要一个新空格
    int flag = 1;
    while (fast < len) {
        if (isalpha(str[fast])) {
            str[slow++] = str[fast];
            flag = 0;
        }
        else if (flag == 0) {
            str[slow++] = ' ';
            flag = 1;
        }
        ++fast;
    }
    str[slow] = '\0';
    //倒序字符串
    int cnt = strlen(str);
    reverse(str, 0, cnt-1);
    //逐个的单个的逆置单词
    int left = 0;
    int right = 0;
    flag = 1;
    //记录每个单词的开始下标和结束下标,再逆置两个下标之间的元素
    while (right <= cnt) {
        if (isalpha(str[right])) {
            ++right;
            flag = 0;
        }
        else {
            reverse(str, left, right - 1);
            ++right;
            left = right;
        }
    }
    puts(str);
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 13:05
点赞 评论 收藏
分享
05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-04 18:02
好不容易拿到了字节Offer,鼠鼠做后端的,但家里人觉得可能被裁员不稳定,让鼠鼠去投国企,现在好纠结到底该咋选
文档传偷助手:该投就投吧,不过建议别放弃offer 拿到手里的才是最好的
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务