妙計旅行一面試題:字符串反轉

 
 
 
 
 字符串反序

根據輸入的字符串,遇到空格或者到字符串末尾,都要進行反轉。即只進行單詞以內的反轉。
例如 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 }

 

注意⚠️:使用這個函數,輸出字符串的長度須要本身定,要保證的是輸出字符串的長度大於等於輸入字符串的長度。面試

相關文章
相關標籤/搜索