From 68bb2db6fb99e3be8640334ddc18297d090ecbf0 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 30 Aug 2020 20:03:07 +0800 Subject: [PATCH 1/2] rotation string --- strings/Rotation.java | 64 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 strings/Rotation.java diff --git a/strings/Rotation.java b/strings/Rotation.java new file mode 100644 index 00000000..e1f0046f --- /dev/null +++ b/strings/Rotation.java @@ -0,0 +1,64 @@ +package strings; + + +/** + * Given a string, moving several characters + * in front of the string to the end of the string. + * For example, move the two characters'a' and 'b' in + * front of the string "abcdef" to the end of the string, + * so that the original string becomes the string "cdefab" + */ +public class Rotation { + public static void main(String[] args) { + assert rotation("abcdef", 2).equals("cdefab"); + + char[] values = "abcdef".toCharArray(); + rotation(values, 2); + assert new String(values).equals("cdefab"); + } + + /** + * Move {@code n} characters in front of given string to the end of string + * time complexity: O(n) + * space complexity: O(n) + * + * @param s given string + * @param n the total characters to be moved + * @return string after rotation + */ + public static String rotation(String s, int n) { + return s.substring(n) + s.substring(0, n); + } + + /** + * Move {@code n} characters in front of given character array to the end of array + * time complexity: O(n) + * space complexity: O(1) + * + * @param values given character array + * @param n the total characters to be moved + */ + public static void rotation(char[] values, int n) { + reverse(values, 0, n - 1); + reverse(values, n, values.length - 1); + reverse(values, 0, values.length - 1); + } + + /** + * Reverse character array + * + * @param values character array + * @param from begin index of given array + * @param to end index of given array + */ + public static void reverse(char[] values, int from, int to) { + while (from < to) { + char temp = values[from]; + values[from] = values[to]; + values[to] = temp; + from++; + to--; + } + } + +} From c4a4b67d087b6058a1ea4b3486f28b3f1f3058df Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Tue, 8 Sep 2020 01:31:23 +0000 Subject: [PATCH 2/2] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 0f2e3528..e9c51452 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -241,4 +241,5 @@ * [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/strings/Palindrome.java) * [Pangram](https://github.com/TheAlgorithms/Java/blob/master/strings/Pangram.java) * [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/strings/ReverseString.java) + * [Rotation](https://github.com/TheAlgorithms/Java/blob/master/strings/Rotation.java) * [Upper](https://github.com/TheAlgorithms/Java/blob/master/strings/Upper.java)