如果您不太熟悉Java字符串,那么您可以先看看Java的左旋转字符串。我希望本文提供的知识点能对你有所帮助。让我们看看成都搜索引擎优化技术编辑
title:定义字符串的左旋转操作:将字符串前的几个字符移动到字符串的末尾例如,将字符串abcdef向左旋转2位以获得字符串cdefab请实现字符串向左旋转的功能对于长度为n的字符串操作,所需时间为0(n),对于辅助内存,所需时间为0(1)。
分析:如果不考虑时间和空间复杂度的限制,最简单的方法是将字符串分为前后两部分,通过旋转操作切换这两部分因此,我们可以创建一个长度为n+1的新辅助空间,将原始字符串的后半部分复制到新空间的前半部分,并将原始字符串的前半部分复制到新空间的后半部分不难看出,这个想法的时间复杂度是O(n),所需的辅助空间是O(n)
下一个思路可能会有点麻烦。假设字符串向左旋转了m位。所以我们首先保存第0个字符,把第m个字符放在第0个位置,把第2m个字符放在第m个位置...以此类推,直到我们到达最后一个可移动的字符,最后把原来的第0个字符放在刚刚移动的位置。然后保存第一个字符,将第m+1个元素移动到第一个位置...重复前面处理第0个字符的步骤,直到处理完前面的m个字符
这个想法还是比较容易理解的,但是当字符串的长度n不是m的整数倍时,编写程序会有些麻烦,感兴趣的朋友可以自己尝试一下。因为下面会介绍更好的方法,所以我不会为这种想法提供代码。
我们仍然认为一个字符串有两个部分,XY向左旋转相当于将字符串XY更改为YX首先,我们对字符串定义一种反转操作,即反转字符串中的字符序列。把x倒过来,写下来作为XT。显然,T=X
我们首先分别翻转X和Y段,这样我们就可以得到XTYT。然后,翻转该XTYT以获得(XTYT)T=(YT)T(XT)T=YX这正是我们期望的结果。
分析在这里我们回到原来的话题我们所要做的就是把字符串分成两段,第一段是前m个字符,其余的分成第二段定义另一个函数来翻转字符串,只需按照前面的步骤翻转三次。时间复杂度和空间复杂度都满足要求。
公共类Test_21 {
公共静态void main(String[)参数){
StringBuilder str = new StringBuilder(“abcde”);
内部索引= 5;系统输出打印输入(左转弯(字符串,索引));< br> }
公共静态字符串左转弯(StringBuilder sb,int索引){
int strlen = sb . length();
如果(某人!= null & amp&索引>。=0。&索引<。= strlen){
int first start = 0;
int first end = index-1;< br> int secondfirst =索引;
int second end = strlen-1;< br>
反转(sb,第一个开始,第一个结束);反向(sb,第二优先,第二结束);
反转(sb,第一次开始,第二次结束);< br>
将某人送回字符串();< br> }
返回空值;< br>
}
公共静态无效反转字符串(字符串生成器字符串,int开始,int结束){
同时(开始& lt=end){
char temp = str.charAt(开始);
字符串集合字符(开始,字符串字符(结束));< br> str.setCharAt(结束,温度);
开始++;
结束-;系统输出打印(字符串);
}
}
这里,Java的左旋转字符串结束如果有什么不清楚的,请给我留言。如果你认为我写得好,请给我一个大拇指,谢谢!