【问题描述】[中等]
【解答思路】
1. 字符串切片
应用字符串切片函数,可方便实现左旋转字符串。
时间复杂度:O(N) 空间复杂度:O(N)
public String reverseLeftWords(String s, int n) {return s.substring(n, s.length()) + s.substring(0, n);}
2. 列表遍历拼接
时间复杂度:O(N) 空间复杂度:O(N)
public String reverseLeftWords(String s, int n) {StringBuilder res = new StringBuilder();for(int i = n; i < s.length(); i++)res.append(s.charAt(i));for(int i = 0; i < n; i++)res.append(s.charAt(i));return res.toString();}//求余运算 优化 public String reverseLeftWords(String s, int n) {StringBuilder res = new StringBuilder();for(int i = n; i < n + s.length(); i++)res.append(s.charAt(i % s.length()));return res.toString();}
3. 字符串遍历拼接
时间复杂度:O(N) 空间复杂度:O(N)
public String reverseLeftWords(String s, int n) {String res = "";for(int i = n; i < s.length(); i++)res += s.charAt(i);for(int i = 0; i < n; i++)res += s.charAt(i);return res;}//取余运算优化public String reverseLeftWords(String s, int n) {String res = "";for(int i = n; i < s.length(); i++)res += s.charAt(i);for(int i = 0; i < n; i++)res += s.charAt(i);return res;}//求余运算 优化
【总结】
1.效率分析
2.字符串拼接
使用‘+’进行字符串拼接时,Java实际上是通过new出一个StringBuilder对象,然后进行append操作,最后通过toString方法返回String对象完成的,会造成内存资源的额外浪费。
所以如果在循环体中,字符串的连接方式,推荐使用StringBuilder的append方法进行扩展,而不要使用‘+’。
不是在循环体中的话,可以使用‘+’,代码更加简洁和可读,如方法一的代码。
3.字符串拼接题目速度 切割函数>列表(StringBuilder) >字符串(String)
转载链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/solution/mian-shi-ti-58-ii-zuo-xuan-zhuan-zi-fu-chuan-qie-p/