拿到这道题的思路就是emmm,根据以往的经验,题目给的测试用例一般会很长,如果长度n
超过了字符串s
的长度length
就会显得冗余,所以给长度n
对字符串s
长度length
取个余,然后根据去余结果n
开一个辅助数组存放要移动的n
元素,不然在后面的移位中这n
元素会被覆盖从而丢失,然后就是简单的后面移位,前面补到后面的操作了
class Solution {
public String reverseLeftWords(String s, int n) {
int length = s.length();
char []c = s.toCharArray();
n = n % length;
char []assist = new char[n];
for(int i = 0; i < n; i++){
assist[i] = c[i];
}
for(int i = n; i < length; i++){
c[i - n] = c[i];
}
for(int i = length - n,j=0; i < length; i++){
c[i] = assist[j++];
}
return String.valueOf(c);
}
}
LeetCode题解:
class Solution {
public String reverseLeftWords(String s, int n) {
return s.substring(n, s.length()) + s.substring(0, n);
}
}
看到这个题解,hhhhhh我好菜啊,只能说dalao们太强了吧,一行代码完事
class Solution {
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();
}
}
//利用求余运算,可以简化代码
class Solution {
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();
}
}
class Solution {
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;
}
}
//利用求余运算,可以简化代码
class Solution {
public String reverseLeftWords(String s, int n) {
String res = "";
for(int i = n; i < n + s.length(); i++)
res += s.charAt(i % s.length());
return res;
}
}