题目

请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。

给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。

测试样例:

"This is nowcoder"
返回:"redocwon si sihT"

解答

题目要求相当于“原地算法”,所以就可以简单的把字符串应该互换的位置直接相互交换就可以实现最后的翻转。代码如下:

class Reverse {
public:
string reverseString(string iniString) {
// write code here
int len=iniString.length();
int i=0;
while(i<=len-1-i)
{
char temp;
temp=iniString[i];
iniString[i]=iniString[len-1-i];
iniString[len-1-i]=temp;
i++;
}
return iniString;
}
};

自己之前做了一个类似的题目,但是要求更高一些:将“I am a student”翻转为"student a am I",这里就涉及到了两次翻转,第一次翻转是单词内部的翻转,将student翻转为tenduts;第二次翻转将整句话进行翻转,最后就能实现题目要求的翻转效果。这道题的解法就可以单独将翻转这个函数提取出来,然后将句子中的“ ”空格作为分隔符,实现单词内的翻转,最后再整句话进行翻转。代码如下:

class Solution {
public:
string ReverseSentence(string str) {
string result=str;
int length=result.size();
if(length==0)
return ""; result+=' ';
int mark=0;
for(int i=0;i<length+1;i++)
{
if(result[i]==' ')
{
Reverse(result,mark,i-1);
mark=i+1;
}
}
result=result.substr(0,length);
Reverse(result,0,length-1);
return result;
} private:
void Reverse(string &str,int begin,int end)
{
while(begin<end)
swap(str[begin++],str[end--]);
}
};

最新文章

  1. 如何用Perl对Excel的数据进行提取并分析
  2. 命令与文件的查询 which whereis locate find
  3. 【javascript激增的思考03】MVVM与Knockout
  4. String[] 转List&lt;String&gt;
  5. ASP.NET MVC 4 RC的JS/CSS打包压缩功能 (转载)
  6. Ubuntu 12.04 下安装 Eclipse
  7. 错误:Duplicate interface definition for class
  8. js中方法类型比较
  9. .net 伪静态、真静态 (mvc)
  10. Android的FrameLayout使用要注意的问题
  11. PDF在线阅读 FlexPaper 惰性加载 ;
  12. LinkCode 整数排序II
  13. 分享45个android实例源码,很好很强大.收藏吧!!!
  14. 刚在在win8.1下装了ubuntu12.04
  15. 子级用了float浮动之后,如何撑开父元素,让父元素div自动适应高度
  16. Cannot locate BeanDefinitionParser for element [scoped-proxy]
  17. Catch a Memory Access Violation in C++
  18. docker save提示no space left on device错误
  19. Linux服务器性能分析与调优
  20. 初识Linux------文件管理

热门文章

  1. BZOJ 1231 [Usaco2008 Nov]mixup2 混乱的奶牛:状压dp + 滚动数组
  2. less的安装使用和入门实践
  3. 迁移学习——使用Tensorflow和VGG16预训模型进行预测
  4. 枚举类型的使用方法enum
  5. &lt;opengl&gt;使用glu绘制二次曲面
  6. CodeForces - 311B:Cats Transport (DP+斜率优化)
  7. 转 对APK进行重签名
  8. 微信小程序再次升级:卖货小店小程序不用开发也能进行交易
  9. Docker入门(五):Swarms
  10. openStack灾备方案说明