【牛客题霸官方题解】N103 反转字符串

反转字符串

http://www.nowcoder.com/questionTerminal/c3a6afee325e472386a1c4eb1ef987f3

文字题解

解法一:

开辟一个和str长度大小相同的一个字符串ans,把传入的str倒序赋值到ans字符串上, 时间复杂度,额外空间复杂度

c++版本代码:

class Solution {
public:
    string solve(string str) {
        string ans = str;
        int len = str.length();
        for(int i = 0 ; i < len ;i++)
        {
                ans[i] = str[len-1-i];
        }
        return ans;
    }
};

java版本代码:

import java.util.*;
public class Solution {
    public String solve (String str) {
        char[] ans = str.toCharArray();
        int len = str.length();
        for(int i = 0 ; i < len ;i++)
        {
                ans[i] = str.charAt(len-1-i);
        }
        return new String(ans);
    }
}

python版本代码:

class Solution:
    def solve(self , str ):
        ans=""
        Len = len(str)
        for i in range(0,Len):
            ans+=str[Len-1-i]
        return ans

解法二:

原地交换,,注意:交换进行的次数是
时间复杂度,额外空间复杂度

c++版本代码:

class Solution {
public:
    string solve(string str) {
        int len = str.length();
        for(int i = 0 ; i < len/2 ;i++)
        {
                swap(str[i],str[len-1-i]);
        }
        return str;
    }
};

java版本代码:

import java.util.*;
public class Solution {
    public String solve (String str) {
        char[] cstr = str.toCharArray();
        int len = str.length();
        for(int i = 0 ; i < len/2 ;i++)
        {
                char t = cstr[i];
                cstr[i] = cstr[len-1-i];
                cstr[len-1-i]=t;
        }
        return new String(cstr);
    }
}

解法三:

直接调用库函数

c++版本代码:

class Solution {
public:
    string solve(string str) {
       reverse(str.begin(),str.end());
       return str;
    }
};

java版本代码:

import java.util.*;
public class Solution {
    public String solve (String str) {
        StringBuffer sb =new StringBuffer(str);//此方法针对的是io流,不能针对字符串。
        return sb.reverse().toString();
    }
}

python版本代码:

class Solution:
    def solve(self , str ):
        return str[::-1]
全部评论
最后一个方法惊人
1 回复 分享
发布于 2021-06-01 12:34
好家伙,还可以直接调用库函数
1 回复 分享
发布于 2021-07-04 22:25
貌似一直都是借助StringBuffer的reverse()方法翻转字符串的。主要是太简单没有必要写for循环,坏处就是需要StringBuffer类。
1 回复 分享
发布于 2023-02-15 23:50 江苏
挺好的
点赞 回复 分享
发布于 2021-04-16 10:34
解法一和解法二的java版本空间复杂度不是一样的吗?解法二空间复杂度不也是O(n)吗?请大佬赐教
点赞 回复 分享
发布于 2021-11-13 10:46
方法二java的for循环体可直接写成ch[i] = str.charAt(len - 1 - i);ch[len - 1 - i] = str.charAt(i);
点赞 回复 分享
发布于 2023-11-07 13:23 广东

相关推荐

头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
头像
10-09 19:35
门头沟学院 Java
洛必不可达:java的竞争激烈程度是其他任何岗位的10到20倍
点赞 评论 收藏
分享
43 20 评论
分享
牛客网
牛客企业服务