我是Stack Overflow的新手,我对一个一直在逃避我的编程课有一个实验室问题.问题要求我们将字符串s的元素向左移动k次.例如,如果输入是“Hello World”和3,则输出“lo WorldHel”).对于非常大的k值,它还必须相对有效地工作.这是我到目前为止:
String cyclicLeftShift(String s, int k){
String result="";
for(int i=0;i
result = s.substring(1, s.length() - 1) +s.charAt(0);
s=result;
}
return s;
}
我的主要问题是原始字符串的最后一个字符不断被循环的后续迭代覆盖.我已经尝试了大量的排列,包括将整个事物转换为数组(这违反了原始问题中的效率限制).我觉得有一件小事我没有得到,我想知道是否有人可以给我一个正确方向的推动?
谢谢!
解决方法:
你想要的是在位置k处拆分字符串并将两个部分再次合并在一起,但顺序相反.
主要问题是k可能大于或等于字符串的大小.所以你需要再次将k带入有效范围.
public static String cyclicLeftShift(String s, int k){
k = k%s.length();
return s.substring(k) + s.substring(0, k);
}
测试方法:
public static void main(String[] args)
{
String test = "Hello World";
for(int i = 0; i < test.length()*3; i++)
System.out.println(cyclicLeftShift(test, i));
}
输出:
Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
WorldHello
WorldHello
orldHello W
rldHello Wo
ldHello Wor
dHello Worl
Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
WorldHello
WorldHello
orldHello W
rldHello Wo
ldHello Wor
dHello Worl
Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
WorldHello
WorldHello
orldHello W
rldHello Wo
ldHello Wor
dHello Worl
标签:java
来源: https://codeday.me/bug/20190727/1556986.html