每天一道LeetCode-----以单词为单位逆序字符串,每个单词之间以一个空格分隔(原字符串中可能有多个空格)
2018-02-07 00:51
483 查看
Reverse Words in a String
原题链接Reverse Words in a String将字符串以单词为单位逆序,每个单词之间以一个空格间隔(原字符串中可能有多个空格)
逆序的方法就是先整体逆序,然后从头到尾每个单词逆序。不容易处理的是单词间空格,只能一个个字符移动
代码如下
class Solution { public: void reverseWords(string &s) { std::reverse(s.begin(), s.end()); int front = 0; int prev = 0; for(int i = 0; i <= s.size(); ++i) { if(i < s.size() && s[i] != ' ') { s[prev++] = s[i]; } else { if(i > 0 && s[i - 1] != ' ') { /* 逆序单词的时候带着空格逆序 */ if(front != 0) s[prev++] = ' '; std::reverse(s.begin() + front, s.begin() + prev); front = prev; prev = prev; } } } s = s.substr(0, prev); } };
相关文章推荐
- 每天一道LeetCode-----将单词数组分成多行,每行长度相同,单词之间用空格分隔,要求空格尽量均匀分布
- 每天一道LeetCode-----将字符串切分,使每个子串都是回文串,计算所有可能结果和最小切分次数
- 计算出一字符串(字符串中每个单词之间有一个或多个空格)中每个单词的 出现的次数
- 每天一道LeetCode-----将字符串切分成若干单词,使得每个单词都在给定的字典中,求出所有的切分结果
- 给定一个字符串s和一个单词dict的字典,确定s是否可以分割成一个或多个字典单词的空格分隔的序列。 s ="leetcode", dict =["leet", "code"].
- 输入一行字符串,统计其中有多少个单词,单词之间用一个或者多个空格分隔开
- 字符串空格的压缩:给定一个字符串,将其中连续出现的空格压缩为1个后,将其中已空格分隔的每个字符串逆序打印出来
- 从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:逆波兰表达式的长度不超过一行,以$符作为输入结束,操作数之间用空格分隔,操作符只可能有+、-、*、/四种运算。例如:234 34+2*$。
- 每天一道LeetCode-----比较两个字符串,每个字符串被若干'.'分成多个数字,一个个比较
- 试编写一个程序,输入一个字符串,统计其中有多少各单词?单词之间用空格分开
- 从一个名为 in_file.txt 的文本文件中读取单词,然后把每个词写到一个名为out_file.txt的输出文件中 并且每个词之间用空格分开
- 给定一个字符串s和一个单词dict的字典,在s中添加空格来构造一个句子,其中每个单词都是有效的字典单词。
- 编程在一个已知的字符串中找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。
- 编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,用空格来分隔单词。
- 用一个函数实现将一行字符串中最短的单词输出。此行字符串从主函数传递给该函数。假设字符串中包含的单词以空格作为分隔符号,例如”Asia Games 2010 is held in GuangZhou.”,其中最短的单词是”is”和”in”。
- 每天一道LeetCode-----一个整数序列,每个元素出现两次,只有一个(两个)出现一次,找到这个(这两个)元素
- 从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:逆波兰表达式的长度不超过一行,以$符作为输入结束,操作数之间用空格分隔,操作符只可能有+、-、*、/四种运算。例如:234 34+2*$。
- 编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,用空格来分隔单词。
- 编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,用空格来分隔单词。
- (1)写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”); (2)编写单元测试进行测试; (3)用ElcEmma查看代码覆盖率,要求覆盖率达到100%。