面试题:单词翻转(代码简洁&效率)

简介:

作者:陈太汉

单词翻转问题是个大公司常考的一个面试题,在网上看了不少实现方法,感觉都有瑕疵,在下今天又无聊一次,自己写了两种实现方式
一个是简洁版,一个是效率版
简洁版当然是简洁明了,思路清晰,很容易看懂,但是效率上有待改进,等改进之后发现发现就不是那么好理解了,所以就有了效率版,
个人还是主张简洁版,它看起来实在是舒服,让我很是满意。
为什么说简洁版效率有瑕疵呢?就是因为方法InvertWord的参数是值传递,就会不断的有变量构造和析构,
效率版就是解决这个问题,改为引用传递,但是引用传递又产生了另一些问题。看一下代码,你会懂的。

//将一句话翻转
// I  am a student--> student a am I 
//先每个单词翻转,再整句话翻转

复制代码
1  #include < iostream >
2  #include < string >
3    using namespace  std;
4 
5    class  InvertWords{
6  public :
7  InvertWords( string *  wo):words(wo){}
8  void  Invert()
9  {
10  int  len = words -> size();
11  int  beg =- 1 ;
12  // 翻转整个字符串
13  InvertWord(beg,len);
14  // 翻转每个单词
15  for ( int  i = 0 ;i < len;i ++ )
16  {
17  if (words -> at(i) == ' ' )
18  {
19  InvertWord(beg,i); 
20  beg = i;
21  }
22  }
23  }
24 
25  private :
26  void  InvertWord( int  beg, int  end)
27  {
28  char  tmp;
29  while ( ++ beg <-- end)
30  {
31  tmp = words -> at(beg);
32  words -> at(beg) = words -> at(end);
33  words -> at(end) = tmp;
34  }
35  }
36  string *  words;
37  };
复制代码
复制代码
1  #include < iostream >
2  #include < string >
3  using namespace  std;
4 
5  class  InvertWords{
6  public :
7  InvertWords( string *  wo):words(wo){}
8  void  Invert()
9  {
10  int  len = words -> size();
11  int  beg =- 1 ,k;
12  // 翻转整个字符串
13  InvertWord(beg,len);
14  // 由于方法InvertWord的参数为引用类型,beg和len的值都被修改了,所以要还原他们的值
15  beg =- 1 ;
16  len = words -> size();
17  // 翻转每个单词
18  for ( int  i = 0 ;i < len;i ++ )
19  {
20  k = i; // k的作用就是保存现场,为了还原i到当前值
21  if (words -> at(i) == ' ' )
22  {
23  InvertWord(beg,i); 
24  i = k; // 还原i
25  beg = i;
26  }
27  }
28  }
29 
30  private :
31  void  InvertWord( int &  beg, int &  end)
32  {
33  char  tmp;
34  while ( ++ beg <-- end)
35  {
36  tmp = words -> at(beg);
37  words -> at(beg) = words -> at(end);
38  words -> at(end) = tmp;
39  }
40  }
41  string *  words;
42  };
复制代码
复制代码
1  int  main()
2  {
3  string  s = "  i am a student  "  ;
4  InvertWords  * rw = new  InvertWords( & s);
5  rw -> Invert();
6  cout << s << endl;
7  int  a = 0 ;
8  cin >> a;
9  return 0 ;
10  }
复制代码
目录
相关文章
|
5月前
|
前端开发
【面试题】如何使用ES6 ... 让代码优雅一点?
【面试题】如何使用ES6 ... 让代码优雅一点?
|
5月前
|
存储 前端开发 JavaScript
【面试题】你是如何让js 代码变得简洁的?
【面试题】你是如何让js 代码变得简洁的?
|
2月前
|
Java 编译器 C++
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
这篇文章解释了Java能够实现“一次编写,到处运行”的原因,主要归功于Java虚拟机(JVM),它能够在不同平台上将Java源代码编译成的字节码转换成对应平台的机器码,实现跨平台运行。
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
|
2月前
|
存储 缓存 Java
面试问Spring循环依赖?今天通过代码调试让你记住
该文章讨论了Spring框架中循环依赖的概念,并通过代码示例帮助读者理解这一概念。
面试问Spring循环依赖?今天通过代码调试让你记住
|
2月前
|
JavaScript 前端开发 程序员
JS小白请看!一招让你的面试成功率大大提高——规范代码
JS小白请看!一招让你的面试成功率大大提高——规范代码
|
4月前
|
存储 算法 Java
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
|
5月前
|
数据采集 数据挖掘 Python
最全妙不可言。写出优雅的 Python 代码的七条重要技巧,2024年最新被面试官怼了还有戏吗
最全妙不可言。写出优雅的 Python 代码的七条重要技巧,2024年最新被面试官怼了还有戏吗
|
5月前
|
缓存 监控 算法
Python性能优化面试:代码级、架构级与系统级优化
【4月更文挑战第19天】本文探讨了Python性能优化面试的重点,包括代码级、架构级和系统级优化。代码级优化涉及时间复杂度、空间复杂度分析,使用内置数据结构和性能分析工具。易错点包括过度优化和滥用全局变量。架构级优化关注异步编程、缓存策略和分布式系统,强调合理利用异步和缓存。系统级优化则涵盖操作系统原理、Python虚拟机优化和服务器调优,需注意监控系统资源和使用编译器加速。面试者应全面理解这些层面,以提高程序性能和面试竞争力。
61 1
Python性能优化面试:代码级、架构级与系统级优化
|
5月前
|
数据采集 XML 程序员
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
|
5月前
|
数据采集 机器学习/深度学习 人工智能
最新用python代码画爱心,来自程序猿的浪漫~_python画爱心代码(1),2024年最新面试简历模板免费
最新用python代码画爱心,来自程序猿的浪漫~_python画爱心代码(1),2024年最新面试简历模板免费
最新用python代码画爱心,来自程序猿的浪漫~_python画爱心代码(1),2024年最新面试简历模板免费