翻转单词顺序 Reverse Words in a String
来源:互联网 发布:论坛数据库下载 编辑:程序博客网 时间:2024/06/05 16:00
问题:Given an input string, reverse the string word by word. For example,
Given s = "the sky is blue
",
return "blue is sky the
".
思路:两轮翻转。第一次整个串彻底反转,第二次逐个单词自身翻转。
输入用例:
输入数据的细节特别重要。开头有空格、结尾有空格、多个空格并列。
class Solution {public: void reverseWords(string &s) { int n = s.size(); if(n == 0) return; string A = ""; int idx, left, right; right = n-1; while(right >= 0 && s[right] == ' ') //去除右侧空格 right--; if(right < 0) { s = ""; return; } idx = 0; while(idx <= right && s[idx] == ' ') //去除左侧空格 idx++; while(idx <= right) { if(s[idx] != ' ' || s[idx-1] != ' ') //拷贝字符和单空格 A += s[idx]; idx++; } n = A.size(); reverse(A, 0, n-1); idx = 0; while(idx < n) { left = idx; while(idx < n && A[idx] != ' ') idx++; right = idx-1; reverse(A, left, right); idx++; //跳过空格 } s = A; } void reverse(string &s, int left, int right) { while(left < right) swap(s[left++], s[right--]); }};
下面是jobduOJ的程序,注意:如果要键盘录入一个字符串,其中含有空格,那么最好用gets(str)。
# include<stdio.h># include<string.h># include<malloc.h> int reverse(char *str, int left, int right) //添加两个参数来控制翻转位置{if(left<0 || left>right || right>strlen(str)-1) //合法性检查return 0;char tmp;while(left<right) //左右游标控制{tmp = str[left];str[left] = str[right];str[right] = tmp;left++;right--;}return 1; //学会返回函数执行状态}void re_order(char *str){int len = strlen(str);int i=0,j=0;while(j<len){while(str[j] != ' ' && str[j] !='\0') //操作检查和合法性检查{j++;}reverse(str, i, j-1);j++;i = j;}}int main(){char a[50000];while(gets(a)){reverse(a, 0, strlen(a)-1);re_order(a);printf("%s\n",a);}return 1;}
- 翻转单词顺序 Reverse Words in a String
- Reverse Words in a String 翻转单词顺序
- 151. Reverse Words in a String & 186.Reverse Words in a String II & 翻转单词顺序列
- leetcode系列(1)Reverse Words in a String 句中单词顺序翻转
- Reverse Words in a String 翻转一个字符串里的单词顺序 @LeetCode
- Reverse Words in a String 翻转句子的单词
- 151. Reverse Words in a String 翻转字符串中的单词
- Reverse Words in a String 反转单词顺序
- Reverse Words in a String 翻转字符串
- LeetCode刷题:Reverse Words in a String(翻转字符串中的单词)
- LeetCode OJ 之 Reverse Words in a String (翻转字符串的单词)
- leetcode151-Reverse Words in a String(翻转字符串单词的位置)
- Reverse Words in a String III 翻转字符串中的单词之三
- leetcode——Reverse Words in a String 旋转字符串中单词顺序(AC)
- 将一个英文句子单词顺序逆置(LeetCode | Reverse Words in a String)
- Reverse Words in a String(字符翻转)
- 【LintCode】Reverse Words in a String 翻转字符串
- 字符串-Reverse Words in a String(翻转字符串)
- 黑马程序员 JAVA1到4天
- Android02
- const成员函数
- E7
- Doxygen使用总结
- 翻转单词顺序 Reverse Words in a String
- 选择排序
- 鼠标滑动事件
- Android App接入微信开放平台注意事项
- [深入浅出Cocoa]Block编程值得注意的那些事儿
- 重写Struts1.x底层
- c++中关于字符串的读入——cin、getline、get、gtes(查询+思考+总结)
- LimeSurvey的使用和简单的二次开发
- HDU 1568 DNA sequence(迭代深搜)