I am a studnet转换成I ma a tneduts有什么效率好点的实现
剑指offer第二版58题的简化版,基于此随便改一下就行没写过java,有什么不合适的欢迎指出githubleetcode时间复杂度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")); } }
默认实现方式:起一个一样的数组,一边遍历一边反着插入,空间和时间都是O(n),也没啥优化空间吧除非允许写一套特殊的字符串访问逻辑,从逻辑上实现字符串反转,这样就O(1)了
定义一个临时字符串,将原来的字符串从未到头的一个个的添加到临时字符串中,这样做法的复杂度是O(n),感觉没有什么可以优化的空间了。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(3)
剑指offer第二版58题的简化版,基于此随便改一下就行
没写过java,有什么不合适的欢迎指出
github
leetcode
时间复杂度O(N)
空间复杂度O(N)
默认实现方式:起一个一样的数组,一边遍历一边反着插入,空间和时间都是O(n),也没啥优化空间吧
除非允许写一套特殊的字符串访问逻辑,从逻辑上实现字符串反转,这样就O(1)了
定义一个临时字符串,将原来的字符串从未到头的一个个的添加到临时字符串中,这样做法的复杂度是O(n),感觉没有什么可以优化的空间了。