实现翻转字符串

发布于 2022-09-12 23:42:28 字数 48 浏览 18 评论 0

I am a studnet转换成I ma a tneduts有什么效率好点的实现

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不顾 2022-09-19 23:42:28

剑指offer第二版58题的简化版,基于此随便改一下就行
没写过java,有什么不合适的欢迎指出
github
leetcode
时间复杂度O(N)
空间复杂度O(N)

public class Solution1 {
    /**
     * 翻转单词顺序
     * @param str
     * @return
     */
    static public String reverseSentence(String str) {
        if (str == null || str.length() == 0) {
            return "";
        }
        char[] chars = str.toCharArray();
        //反转每个单词
        int i = 0, j = 0;
        while (j <= chars.length) {
            if (j == chars.length || chars[j] == ' ') {
                reverse(chars, i, j - 1);
                i = j + 1;
            }
            j++;
        }
        return new String(chars);
    }

    /**
     * 反转char数组
     * @param chars
     * @param start
     * @param end
     */
    static public void reverse(char[] chars, int start, int end) {
        while (start < end) {
            swap(chars, start, end);
            start++;
            end--;
        }
    }

    /**
     * 交换char数组两个位置的值
     * @param chars
     * @param i
     * @param j
     */
     public static void swap(char[] chars, int i, int j) {
        char temp = chars[i];
        chars[i] = chars[j];
        chars[j] = temp;
    }
    
    
     public static void main(String []args){
        System.out.println(reverseSentence("I am a studnet"));
     }
}
以歌曲疗慰 2022-09-19 23:42:28

默认实现方式:起一个一样的数组,一边遍历一边反着插入,空间和时间都是O(n),也没啥优化空间吧
除非允许写一套特殊的字符串访问逻辑,从逻辑上实现字符串反转,这样就O(1)了

阪姬 2022-09-19 23:42:28

定义一个临时字符串,将原来的字符串从未到头的一个个的添加到临时字符串中,这样做法的复杂度是O(n),感觉没有什么可以优化的空间了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文