Merge pull request #1449 from shellhub/dev

Added rotation string
This commit is contained in:
Du Yuanchao 2020-09-08 11:45:45 +08:00 committed by GitHub
commit 7de8661406
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 65 additions and 0 deletions

View File

@ -241,4 +241,5 @@
* [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/strings/Palindrome.java) * [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/strings/Palindrome.java)
* [Pangram](https://github.com/TheAlgorithms/Java/blob/master/strings/Pangram.java) * [Pangram](https://github.com/TheAlgorithms/Java/blob/master/strings/Pangram.java)
* [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/strings/ReverseString.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) * [Upper](https://github.com/TheAlgorithms/Java/blob/master/strings/Upper.java)

64
strings/Rotation.java Normal file
View 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--;
}
}
}