腾讯经典面试题(字符串以单词为单位逆转输出)

题目:输入一个字符串,以单词为单位,逆转输出
例:I love you逆转输出后: you love I

题解:
关于字符串的倒置题基本上都可以采用递归的思路,而栈的特性(后进先出)完美契合了题目以单词为单位逆转输出的要求(例如字符串最末尾的单词是最后进栈的,但在输出时,一定是最先出栈的)

 class solution {
 private:
	 //栈reverse用于存储倒置后的结果
	 stack<string>reverse;
     void Reverse(string obj)
	 {
		 
		 int ptr = 0;
		 //用空格来区分两个单词,遇到空格时指针停止,标志着找到一个单词
		 while (ptr!=obj.length()&&obj[ptr]!=' ') ptr++;
		 //将找到的单词存入栈中
		 if(ptr!=0)reverse.push(obj.substr(0, ptr));
		 //如果指针没有遍历完字符串,则递归,找下一个单词
		 if (ptr+1<obj.length())Reverse(obj.substr(ptr + 1));
	
	 }
 public:
	 //返回结果
	 string Res(string obj)
	 {
		 string res;
		 Reverse(obj);
		 while (!reverse.empty())
		 {
			 res += reverse.top();
			 res += " ";
			 reverse.pop();
		 }
		 return res;
	 }
 };

你可能感兴趣的:(每天一道算法题)