剑指 Offer 58 - II. 左旋转字符串
题目:
思路:
【1】思路很简单,转为数组进行遍历,然后因为知道长度了,所以放进对应的位置即可
代码展示:
//时间2 ms击败51.48% //内存41.6 MB击败30.61% //时间复杂度O(N) //空间复杂度O(N) class Solution { public String reverseLeftWords(String s, int n) { int l = s.length(); char[] ch = new char[l]; for (int i = 0; i < l; i++){ if (i < n){ ch[l-n+i] = s.charAt(i); }else { ch[i-n] = s.charAt(i); } } return new String(ch); } } 对应上面的这种其实还有第二种写法(拆分成两个循环): //时间4 ms击败32.33% //内存41.3 MB击败67.70% class Solution { public String reverseLeftWords(String s, int n) { StringBuilder sb = new StringBuilder(); for (int i = n; i < s.length(); ++i) { sb.append(s.charAt(i)); } for (int i = 0; i < n; ++i) { sb.append(s.charAt(i)); } return sb.toString(); } } //时间0 ms击败100% //内存41.6 MB击败28.51% class Solution { public String reverseLeftWords(String s, int n) { return s.substring(n, s.length()) + s.substring(0, n); } } //依据上面的函数其实可以简化成这种,开辟的内存最少,而且采用的是系统复制,操作也是最少的,算得上是这几种中最优的 //时间0 ms击败100% //内存41.2 MB击败84.69% class Solution { public String reverseLeftWords(String s, int n) { char[] ch = s.toCharArray(); String s1 = new String(ch,0,n); String s2 = new String(ch,n,s.length()-n); return s2+s1; } }