初学Java,最近一直学习基础部分,为了巩固所学的知识。于是在力扣上刷题,于是看到了下面这样一道题:
左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
题目来源:力扣(LeetCode)
看到这道题我的想法是将这个字符串放到字符数组中,然后将数组中的字符按照题目要求的顺序遍历到一个新的字符数组中。以下为我使用Java语言的代码:
class Solution { public String reverseLeftWords(String s, int n) { char[] str1= new char[s.length()]; char[] str2 = s.toCharArray(); for(int i = n,j = 0;i < s.length();i++,j++){ str1[j] = str2[i]; } for(int j = s.length()-n,i = 0;i < n;i++,j++){ str1[j] = str2[i]; } s = new String(str1); return s; } }
然后我在力扣题解区看到了对于这道题更加简便的方法:
-
字符串切片法
该方法主要是用到了Java中String类的substring()方法,该方法的语法与参数如下:
public String substring(int beginIndex) 或 public String substring(int beginIndex, int endIndex)
参数:
beginIndex -- 起始索引(包括), 索引从 0 开始。
endIndex -- 结束索引(不包括)。
substring()方法主要是根据传进来的索引参数返回字符串的子字符串。
于是,根据这个方法上面的题就有了如下解法:
class Solution { public String reverseLeftWords(String s, int n) { return s.substring(n, s.length()) + s.substring(0, n); } }
-
字符串遍历拼接
该方法核心思想为创建一个空字符串,然后利用for循环和charAt()方法,将字符串中的字符按顺序一个个的添加到新的空字符串中。
该方法中用到的Java String类中的charAt()方法,charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。该方法的语法与参数如下:
public char charAt(int index)
参数:
index -- 字符的索引。
于是,根据这个方法上面的题就有了如下解法:
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; } }