字符序列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);
相关文章推荐
- 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
- 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZde
- 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZde
- 找出字符串的最长子串,要求子串的所有字符相同 例如:str ="sssddddabcdef" 则输出字串为:dddd
- 3.输入一个字节内的数(0~255)和移动位数。输出移位结果(要求循环移位)提示:系统自带的移位都是非循环的
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- Java 输入一个大写字符,如F 比如 输入:F 输出 FEDCBA EDCBAB DCBABC CBABCD BABCDE ABCDEF 输入 B 输出: BA AB
- 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上,要求输出结果必须按ABC的顺序显示:ABCABC
- 排列(permutation):用1,2,3,...,9组成3个三位数abc, def和ghi,每个数字恰好使用一次,要求abc:def:ghi = 1:2:3。输出所有解。提示:不必太动脑筋。
- 润和面试题:开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 用1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解
- 输入一个字节内的数(0~255)和移动位数。输出移位结果(要求循环移位)提示:系统自带的移位都是非循环的
- 输入一个字符串: 例如:输入为:“*****A*B**C**DE**F****” 删除字符中间的*,即输出为*****ABCDEF****
- 用1,2....9组成三个三位数abc,def,ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3,输出所有解
- 输入一个字节内的数(0~255)和移动位数。输出移位结果(要求循环移位)提示:系统自带的移位都是非循环的
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。