Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions DIRECTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
64 changes: 64 additions & 0 deletions strings/Rotation.java
Original file line number Diff line number Diff line change
@@ -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--;
}
}

}