题解 | #左旋转字符串#
左旋转字符串
http://www.nowcoder.com/practice/12d959b108cb42b1ab72cef4d36af5ec
方法1:三次翻转
public class Solution { public String LeftRotateString(String str,int n) { if(str.length()==0 || n>=str.length()){ return str; } char[] chars=str.toCharArray(); reverse(chars,0,n-1); reverse(chars,n,chars.length-1); reverse(chars,0,chars.length-1); return new String(chars); } public void reverse(char[] chars,int i,int j){ while(i<j){ swap(chars,i++,j--); } } public void swap(char[] chars,int i,int j){ char temp=chars[i]; chars[i]=chars[j]; chars[j]=temp; } }
方法2:substring()
public class Solution { public String LeftRotateString(String str,int n){ if(str==null || n>str.length()){ return str; } return str.substring(n)+str.substring(0,n); } }
方法3:遍历
public class Solution { public String LeftRotateString(String str,int n) { if(str==null || n>str.length()){ return str; } char[] ch=str.toCharArray(); StringBuffer sb=new StringBuffer(); for(int i=n;i<str.length();i++){ sb.append(ch[i]); } for(int i=0;i<n;i++){ sb.append(ch[i]); } return sb.toString(); } }
剑指Offer题解 文章被收录于专栏
剑指Offer-Java版本题解