目录
题目地址:
难度:简单
今天刷动态口令(左旋字符串),大家有兴趣可以点上看看题目要求,试着做一下。
我们直接看题解吧:
解题方法:
方法1、暴力遍历,嵌套双循环
方法2、字符串切片
方法3、列表遍历拼接
方法4、字符串拼接
方法5、三次反转
审题目+事例+提示:
前target字符按照原顺序移动至末尾
解题思路:
方法4(字符串拼接):
1、创建一个字符串变量
2、两次循环,分别将target~length-1,0~target依次拼接
3、返回更新后的字符串、
代码实现:
class Solution {
public String dynamicPassword(String password, int target) {
String res = ""; //创建新字符串变量
for(int i = target; i < password.length(); i++)//先拼接target后面部分
res += password.charAt(i);
for(int i = 0; i < target; i++) //接着拼接target前面部分
res += password.charAt(i);
return res; //返回对应字符串变量
}
}
代码优化:
class Solution {
public String dynamicPassword(String password, int target) {
String res = "";
for(int i = target; i < target + password.length(); i++)
//利用取余运算
//i=target ~ password.length
//i=password.length ~ target+password.length
res += password.charAt(i % password.length());
return res;
}
}
方法5(三次反转):
第一次,将前target部分进行反转
第二次,将target至字符串尾部分进行反转
第三次,将字符串的整体反转
代码实现:
class Solution {
public String dynamicPassword(String password, int target) {
//将字符串转为字符串数组,利用toCharArray()方法
char[] pawdArr=password.toCharArray();
int len=pawdArr.length;
//判断是否为空,空则直接返回字符串
if(len<=0)
return password;
target=target%len;//当target>len,进行取余
reversepawd(pawdArr,0,target-1); //调用reversepawd()函数,第一次反转(0,target-1)
reversepawd(pawdArr,target,len-1);//调用reversepawd()函数第二次反转(target,len-1)
reversepawd(pawdArr,0,len-1);//调用reversepawd()函数,第三次反转(0,len-1)
return new String(pawdArr);//new新字符串装更新后的字符数组
}
//创建反转函数方法,参数为对应字符数组,反转的起始位位置与结束位置
public void reversepawd(char[] array,int begin,int end){ //反转字符串,前后指针
for(;begin<end;begin++,end--){
// begin 与end 依次互换
char c=array[begin];
array[begin]=array[end];
array[end]=c;
}
}
代码(暴力解法):
//这里Str即password,n即target
public String LeftRotateString(String str,int n) {
char[] strArr=str.toCharArray();
int len=strArr.length;
if(len<=0)
return str;
n=n%len;
for(int i=0;i<n;i++){ //只控制循环次数
char c=strArr[0];
for(int j=0;j<len-1;j++) //拿出第一个,后面依次前移,复杂度O(n^2)
strArr[j]=strArr[j+1];
strArr[len-1]=c;
}
return new String(strArr);
}
代码(字符切片):
class Solution {
public String dynamicPassword(String password, int target) {
return password.substring(target, password.length()) + password.substring(0, target);
}
}
注:利用subString()方法
代码(列表拼接):
class Solution {
public String dynamicPassword(String password, int target) {
StringBuilder res = new StringBuilder();
for(int i = target; i < password.length(); i++)
res.append(password.charAt(i));
for(int i = 0; i < target; i++)
res.append(password.charAt(i));
return res.toString();
}
}
注:利用append()方法