字符串反序
根据输入的字符串,遇到空格或者到字符串末尾,都要进行反转。即只进行单词之内的反转。
例如 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 }
注意⚠️:使用这个函数,输出字符串的长度需要自己定,要保证的是输出字符串的长度大于等于输入字符串的长度。