編寫一個函數,其作用是將輸入的字符串反轉過來。輸入字符串以字符數組 char[] 的形式給出。
不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。
你可以假設數組中的所有字符都是 ASCII 碼錶中的可打印字符。
示例 1:
輸入:["h","e","l","l","o"]
輸出:["o","l","l","e","h"]
示例 2:
輸入:["H","a","n","n","a","h"]
輸出:["h","a","n","n","a","H"]
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/reverse-string
#include <stdio.h>
/**
輸入字符串以字符數組 char[] 的形式給出。
不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。
簡單的交換
*/
void reverseString_1(char* s, int sSize)
{
int i =0;
int tail = sSize-1;
char temp;
while(i+1 <= sSize/2 )
{
temp = s[i];
s[i] = s[tail-i];
s[tail-i] = temp;
i++;
}
///當時糾結奇數與偶數項需要分別處理,後來手動演算,發現不需要如此操作,對於奇數項中間項被直接空留
}
void reverseString(char* s, int sSize)
{
char * start = s;
char * tail = s +sSize -1;
char temp;
while(start <tail){
temp = *start;
*start = *tail;
*tail = temp;
start++;
tail--;
}
}
int main(void)
{
char arr[5]= {'h','e','l','y','o'};
reverseString_1(arr, 5);
for(int j =0; j<5; ++j)
{
printf("%c\n",arr[j]);
}
return 0;
}