• 妙计旅行一面试题:字符串反转


    字符串反序

    根据输入的字符串,遇到空格或者到字符串末尾,都要进行反转。即只进行单词之内的反转。
    例如 This is a macbook -> sihT si a koobcam。
    要去:时间复杂度 On

    当时面试的时候,一脸懵逼,所以题目做的一塌糊涂。现在又到了要找工作的时间段了,再看到这个题,突然有了眉目。

    解题思路:
    循环遍历输入的字符串,在遇到空格或者字符串结尾时,对刚才遍历的单词反向写入输出字符串。在循环没有到输入字符串末尾时,每个单词反向写入之后添加空格。

    具体的代码:
     1 bool reverse(const char* input, char* output)
     2 {
     3     if (nullptr == input || nullptr == output)
     4     {
     5         return false;
     6     }
     7 
     8     char sep = ' ';
     9     size_t index = 0;
    10     size_t size = strlen(input);
    11     for (size_t i = 0; i < size; ++i)
    12     {
    13         // 遇到空格或者字符串末尾,才会进行下一步的反转字符串
    14         if (input[i] != sep && i != size - 1)
    15         {
    16             continue;
    17         }
    18 
    19         // 遇到空格,从空格前一个字符开始反向遍历
    20         // 到字符串末尾,从当前位置开始反向遍历
    21         // 反向遍历的终止是到字符串开始或者遇到空格,这个for循环的下表j的类型不能是size_t
    22         for (int j = (i == size - 1) ? i : i - 1; (j >= 0) && input[j] != sep; --j)
    23         {
    24             output[index++] = input[j];
    25         }
    26 
    27         // 不是字符串末尾时,要在输出字符串末尾添加空格
    28         if (i != size - 1)
    29         {
    30             output[index++] = sep;
    31         }
    32     }
    33     return true;
    34 }

    注意⚠️:使用这个函数,输出字符串的长度需要自己定,要保证的是输出字符串的长度大于等于输入字符串的长度。

  • 相关阅读:
    TCP通信丢包原因总结
    根据日志查看QPS
    mysql:备份、复制
    集群
    redis性能提升
    redis源码——多机数据库的实现
    redis源码——单机数据库的实现
    redis 设置过期Key 的 maxmemory-policy 六种方式
    字符处理
    贝塞尔曲线
  • 原文地址:https://www.cnblogs.com/zhugaopeng/p/10463653.html
Copyright © 2020-2023  润新知