344. 反转字符串

    科技2025-09-01  6


    题目

    编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组char[]的形式给出。

    不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。

    你可以假设数组中的所有字符都是ASCII码表中的可打印字符。


    思路

    单指针
    从首位到中间位置,[0,length/2),逐个与对应位置(length-1-i)交换。交换方式:临时变量,a=a+b b=a-b a=a-b(可能超出数据类型范围)。复杂度分析 时间复杂度:O(N),N为字符串长度。空间复杂度:O(1)。 class Solution { public void reverseString(char[] s) { int length=s.length; for(int i=0;i<length/2;i++){ char c=s[i]; s[i]=s[length-1-i]; s[length-1-i]=c; } } } class Solution { public void reverseString(char[] s) { int length=s.length; for(int i=0;i<length/2;i++){ s[i]=(char)(s[i]+s[length-1-i]); s[length-1-i]=(char)(s[i]-s[length-1-i]); s[i]=(char)(s[i]-s[length-1-i]); } } }
    双指针
    从首位和末位开始,向中靠拢,逐一交换。交换方式:临时变量,a=a+b b=a-b a=a-b(可能超出数据类型范围)。复杂度分析 时间复杂度:O(N),N为字符串长度。空间复杂度:O(1)。 class Solution { public void reverseString(char[] s) { for(int left=0,right=s.length-1;left<right;left++,right--){ char c=s[left]; s[left]=s[right]; s[right]=c; } } } class Solution { public void reverseString(char[] s) { for(int left=0,right=s.length-1;left<right;left++,right--){ s[left]=(char)(s[left]+s[right]); s[right]=(char)(s[left]-s[right]); s[left]=(char)(s[left]-s[right]); } } }
    Processed: 0.011, SQL: 8