您的位置:首页 > 其它

字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”

2016-10-18 18:06 302 查看

方法1

private static String LeftRotateString1(String str,int n) {
if(str.length() == 0||str == null || n < 0) return str;
n = n % str.length();
return str.substring(n) + str.substring(0, n);
}


这个方法直接将向左循环出去的子字符串直接连接到剩下的字符串后,因为是循环,所以要对左移次数对字符串长度取模;

注意:String.substring(0,n);这个方法是相当于【0,n),右边是开的,子字符串中不会包含第n个字符;

方法2

public String LeftRotateString2(String str,int n)
{
char []c=str.toCharArray();
if(c.length<n)return "";
//先逆序被移位出去的那些字符     例如[a,b,c,d,e] n = 3 ---> [c,b,a,d,e]
reverse(c,0,n-1);
//再逆序剩下的那些字符      -----> [c,b,a,e,d]
reverse(c,n,c.length-1);
//再将整个字符数组逆序一遍   ---->[d,e,a,b,f]
reverse(c,0,c.length-1);
StringBuilder sb=new StringBuilder();
for(char t:c)sb.append(t);
return sb.toString();
}
public void reverse(char []c,int low,int high)
{
while(low<high)
{
char temp=c[low];
c[low]=c[high];
c[high]=temp;
low++;
high--;
}
}


这个方法的时间复杂度是O(n),空间复杂度是O(n);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  字符串
相关文章推荐