leetcode - Reverse Words in a String
2015-07-07 15:59
330 查看
题意:
Given an input string, reverse the string word by word.
For example,
Given s = "
return "
Update (2015-02-12):
For C programmers: Try to solve it in-place in O(1) space.
click to show clarification.
思路:先将字符串中连续空格删除,不同单词之间仅保留一个空格。同时将开始的空格删除,结尾的空格删除。
然后将字符串进行就地逆置,将字符串的各个单词进行就地逆置。
class Solution {
public:
void delete_kong(string &s)
{
int i = 0;
int len = s.length();
int index = 0;
for(i = 0;i<len;i++)
{
if(s[i] == ' ')
continue;
else
break;
}
int j = i;
for(j = i;j<len;j++)
{
if(s[j] == ' ' && j+1<len && s[j+1] == ' ')
{
continue;
}
else
{
s[index] = s[j];
index++;
}
}
if(s[index-1] == ' ')
index--;
s = s.substr(0,index);
}
void reverse(string &s,int start,int end)
{
int i = 0;
int mid = (end-start)/2;
for(i = 0;i<=mid;i++)
{
char temp = s[start+i];
s[start+i]= s[end-i];
s[end-i] = temp;
}
}
void reverseWords(string &s) {
int i = 0;
if(s == " " || s== "")
s = "";
delete_kong(s);
int len = s.length();
int start = 0;
int end = len-1;
reverse(s,start,end);
//cout<<s<<endl;
for(i = 0;i<len;i++)
{
if(s[i] == ' ')
{
if((i-1)>=0)
{
end = i-1;
reverse(s,start,end);
start = i+1;
end = i+1;
}
}
}
end = len-1;
reverse(s,start,end);
}
};
Given an input string, reverse the string word by word.
For example,
Given s = "
the sky is blue",
return "
blue is sky the".
Update (2015-02-12):
For C programmers: Try to solve it in-place in O(1) space.
click to show clarification.
思路:先将字符串中连续空格删除,不同单词之间仅保留一个空格。同时将开始的空格删除,结尾的空格删除。
然后将字符串进行就地逆置,将字符串的各个单词进行就地逆置。
class Solution {
public:
void delete_kong(string &s)
{
int i = 0;
int len = s.length();
int index = 0;
for(i = 0;i<len;i++)
{
if(s[i] == ' ')
continue;
else
break;
}
int j = i;
for(j = i;j<len;j++)
{
if(s[j] == ' ' && j+1<len && s[j+1] == ' ')
{
continue;
}
else
{
s[index] = s[j];
index++;
}
}
if(s[index-1] == ' ')
index--;
s = s.substr(0,index);
}
void reverse(string &s,int start,int end)
{
int i = 0;
int mid = (end-start)/2;
for(i = 0;i<=mid;i++)
{
char temp = s[start+i];
s[start+i]= s[end-i];
s[end-i] = temp;
}
}
void reverseWords(string &s) {
int i = 0;
if(s == " " || s== "")
s = "";
delete_kong(s);
int len = s.length();
int start = 0;
int end = len-1;
reverse(s,start,end);
//cout<<s<<endl;
for(i = 0;i<len;i++)
{
if(s[i] == ' ')
{
if((i-1)>=0)
{
end = i-1;
reverse(s,start,end);
start = i+1;
end = i+1;
}
}
}
end = len-1;
reverse(s,start,end);
}
};
相关文章推荐
- leetcode - Reverse Words in a String
- 硬件电路之电感,磁珠,零欧姆电阻的应用
- LeetCode89:Gray Code
- HTML5学习笔记-1.网页入门
- MSP430F149学习之路——按键与LED
- android studio 中出现"...ProjectScript\buildscript\cache.properties.lock"
- LeetCode-Implement Queue using Stacks-解题报告
- Check Point 删除老的升级包和遗留文件
- 关于QT4.8修改UI不能运行显示
- 优先级反转
- Java作业整理 敏感词汇
- uva 10934 装满水的气球
- TableView的详细使用
- delphi Tpagecontrol 动态增加页面
- 各种输入
- Spring, 基于自动代理实现aop
- STL 几个函数的用法
- db2 DIAGSIZE设置
- Android-Universal-Image-Loader的缓存处理机制研究
- iOS 计算label的高度