LeetCode OJ : Reverse Words in a String

本文介绍了如何在C语言中实现字符串中单词顺序的反转,并处理字符串前后及单词间多余的空格,确保输出符合特定格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Reverse Words in a String 

链接:https://leetcode.com/problems/reverse-words-in-a-string/

题解:

给你一个字符串"the sky is blue",把单词顺序置反,变成"blue is sky the"。提示:For C programmers: Try to solve it in-place in O(1) space.

思路就是先把整体置反,然后对每个单词置反。

问题是给出的字符串前后可能有多余的空格,字符串之间也可能有多余一个的空格。输出的要求前后没有多余空格而且单词以一个空格分隔。

因此需要先把前后的空格除去,再置反完成后再把单词间的空格除去。

代码:

void reverseWord(char *s,int a,int b){//把[a,b)之间置反
    char c;
    for(--b;a<b;++a,--b){
        c=*(s+a);
        *(s+a)=*(s+b);
        *(s+b)=c;
    }
}
void reverseWords(char *s) {
    int len=strlen(s);
    int i,a,b;
    for(;len>=0&&(s[len]==' '||s[len]=='\0');--len);//除去串尾空格
    ++len;
    s[len]='\0';
    reverseWord(s,0,len);
    for(i=0,a=0,b=0;i<=len;++i){
        if(s[i]==' '||s[i]=='\0'){
            reverseWord(s,a,i);
            for(;i<len&&s[i]==' ';++i);
            a=i;
        }
    }
    for(;len>=0&&(s[len]==' '||s[len]=='\0');--len);//除去串尾空格(即除去原字串串前空格)
    ++len;
    s[len]='\0';
    a=b=0;
    for(i=0;i<len;){
        if(s[i]!=' '){
            s[a]=s[i];
            ++a;
            ++i;
        }
        else{
            for(;i<len&&(s[i]==' ');++i);
            s[a]=' ';
            ++a;
        }
    }
    s[a]='\0';
}


来源: http://blog.youkuaiyun.com/acm_ted/article/details/44515671


<think>我们首先需要理解用户的需求:用户希望查找中国矿业大学研究生复试上机考试的相关题目或准备资料。由于中国矿业大学有多个校区(北京和徐州),且不同学院可能要求不同,因此需要明确考试的一般情况。 根据网络搜索结果,中国矿业大学(北京)和徐州校区的研究生复试中,部分学院(如计算机学院)会设置上机考试环节。上机考试通常考察编程能力,语言多为C、C++或Java,题目难度一般与基础编程题和数据结构算法相关。 常见的准备资料和题目类型包括: 1. 基础编程题:如输入输出、条件判断、循环控制、数组操作等。 2. 数据结构:链表、栈、队列、树、图等基本操作。 3. 算法:排序(冒泡、快排等)、查找、递归、动态规划、贪心算法等基础题目。 由于学校通常不公开历年真题,因此准备时可以参照其他高校复试机试的常见题型,以及一些在线评测平台(如LeetCode、牛客网)的入门和中等难度题目。 具体建议如下: 1. 复习编程基础:重点掌握一门编程语言(C/C++或Java),熟悉基本语法和常用库函数。 2. 练习数据结构与算法:通过在线平台刷题,从简单题目开始,逐步提高难度。 3. 参考其他高校机试题:例如浙江大学、北京大学等高校的复试机试题,题型和难度有相似之处。 4. 查阅学校相关论坛或经验贴:在考研论坛、知乎等平台搜索“中国矿业大学 复试 机试”等关键词,可能会有往届考生分享的经验和题目回忆。 根据搜索到的信息,中国矿业大学(北京)计算机系近年复试上机考试的部分题目类型包括: - 字符串处理(如反转、统计等) - 数组排序和查找 - 简单的动态规划问题(如斐波那契数列、背包问题等) - 树和图的遍历(如二叉树的前中后序遍历) 由于具体题目不公开,以下提供一个示例题目(类似难度)供练习: 示例题目:计算斐波那契数列的第n项(n<=50),斐波那契数列定义如下: F(0)=0, F(1)=1, F(n)=F(n-1)+F(n-2) (n>=2) 代码实现(C++): ```cpp #include <iostream> using namespace std; long long fib(int n) { if (n == 0) return 0; if (n == 1) return 1; long long a = 0, b = 1, c; for (int i = 2; i <= n; i++) { c = a + b; a = b; b = c; } return b; } int main() { int n; cin >> n; cout << fib(n) << endl; return 0; } ``` 另外,建议考生关注学校官网或学院通知,以获取最新的复试要求和考试形式。 §§相关问题§§: 1. 中国矿业大学计算机专业研究生复试上机考试常用哪些编程语言? 2. 中国矿业大学研究生复试上机考试的评分标准是什么? 3. 如何高效准备中国矿业大学研究生复试的上机考试部分?</think>针对中国矿业大学研究生复试上机考试的题目和资料,综合网络搜索结果整理如下: ### 考试形式与内容 上机考试通常要求使用C/C++或Java语言 考试时长约2小时,环境为学校机房 题型包括基础编程、数据结构应用和算法设计 难度范围:基础题(30%)、中等题(50%)、较难题(20%) ### 常见题目类型 **字符串处理** 实现字符串反转、统计词频、回文检测等 示例:输入句子实现单词逆序输出 ```c #include <stdio.h> #include <string.h> void reverseWords(char *str) { int len = strlen(str); for (int i = len-1; i >=0; i--) { if (str[i]==' ') { str[i] = '\0'; printf("%s ", &str[i]+1); } } printf("%s", str); } ``` **数据结构应用** 链表操作(反转/合并) 二叉树遍历(前序/中序/后序) 栈和队列的实现与应用 **算法设计** 排序算法实现(快速排序/归并排序) 查找算法(二分查找) 动态规划基础问题(斐波那契数列/背包问题) ### 备考资源 1. **在线题库平台** - 牛客网「中国矿业大学机试真题」专题 - LeetCode「剑指Offer」基础题库 - 杭电OJ(HDU ACM)1000-1010基础题 2. **参考书籍** - 《算法笔记》(胡凡著)第4章机试实战 - 《计算机考研机试指南》(王道论坛编) - 《C程序设计(第五版)》(谭浩强)文件操作章节 3. **重点练习方向** 文件I/O操作(数据读取/结果输出) 数学问题(质数判断/最大公约数) 模拟题(日期计算/进制转换) ### 注意事项 考试系统可能禁用STL库(C++) 需掌握手动实现基础数据结构 历年真题可通过矿大计算机学院BBS获取
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值