commit
7de8661406
@ -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
strings/Rotation.java
Normal file
64
strings/Rotation.java
Normal file
@ -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--;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user