编程珠玑-循环左移字符串
实现两种解法:
第一种为借助中间变量,
package leetcode; public class ReverseString { /** * * @param s * @param step * @return */ public static char[] reverseString(String s, int step) { char[] reverse = s.toCharArray(); char tmp = reverse[0]; int i = 0; int start = 0; int firstPosition = start; int end = start + step; int len = reverse.length; while (i < len) { if (end == firstPosition) { reverse[start] = tmp; firstPosition = firstPosition + 1; start = firstPosition; tmp = reverse[start]; } else { reverse[start] = reverse[end]; start = end; } end = start + step; start = start % len; end = end % len; i++; } return reverse; } public static void main(String[] args) { System.out.println(reverseString("abcdfghggggggggggggggggggggggggggggg", 8)); } }
第二种利用求逆公式
package leetcode; public class ReverseStringUseInverse { public static char[] reverseString(String s, int step) { char[] reverse = s.toCharArray(); char tmp; int len = reverse.length; int rightLen = len - step; for (int i = 0; i < step / 2; i++) { tmp = reverse[i]; reverse[i] = reverse[step - 1 - i]; reverse[step - 1 - i] = tmp; } for (int i = 0; i < rightLen / 2; i++) { tmp = reverse[i + step]; reverse[i + step] = reverse[len - i - 1]; reverse[len - i - 1] = tmp; } for (int i = 0; i < len / 2; i++) { tmp = reverse[i]; reverse[i] = reverse[len - i - 1]; reverse[len - i - 1] = tmp; } return reverse; } public static void main(String[] args) { System.out.println(reverseString("abcdefgh", 5)); } }

浙公网安备 33010602011771号