欢迎光临散文网 会员登陆 & 注册

面试题分享:一道常见的C++程序员面试题

2023-03-21 17:07 作者:CPP编程学习  | 我要投稿

如果以编程难度为标准,我认为这道题的难度应该是三颗星(五颗星为最高难度)。

难度不算很高,只需要掌握C++字符串操作和双指针法即可完成。

同时,答案也比较简单明了,代码实现也非常直观。但如果以面试考察范围进行评估,因为该问题是C++基础语法中的一个小问题,所以面试官可能会根据候选人的表现来定位其技能水平,并根据此为基础提出更深入、更具挑战性的问题。


问题:

请编写一个函数 reverseStr(string s),将字符串s反转并返回。

例如,若输入为 "hello world",则函数应返回 "dlrow olleh"。

要求使用 C++ 语言实现,并尽可能优化算法时间复杂度和空间复杂度。


样例输入输出:

输入: "hello world"

输出: "dlrow olleh"


解题思路:

这道题可以采用双指针法来实现字符串反转。具体来说,我们定义两个指针i和j,分别指向字符串s的首尾位置。然后交换i和j指向的字符,并将i和j向中间移动,直到它们相遇为止。

最后返回反转后的字符串即可。

以下是示例代码:

#include <iostream>

#include <string>

using namespace std;

string reverseStr(string s) {   

    int i = 0, j = s.size() - 1;  

     while (i < j) {       

        swap(s[i], s[j]);       

        ++i;

       --j;

   }    return s;

} int main() {

   string s = "hello world";

   cout << reverseStr(s) << endl;

  // 输出结果为:dlrow olleh

   return 0;

}

以上代码中,我们先定义了两个指针i和j,初始时分别指向字符串s的首尾位置。然后在循环中,我们不断交换i和j指向的字符,并将i和j向中间移动。当i和j相遇时,反转结束。最后,我们将反转后的字符串返回即可。

该算法的时间复杂度为O(n),其中n为字符串的长度,空间复杂度为O(1)。由于只需要对字符串进行一次遍历,因此该算法的时间复杂度较低,适合处理大规模数据。


关注 微信公众号:奇牛编程


面试题分享:一道常见的C++程序员面试题的评论 (共 条)

分享到微博请遵守国家法律