728x90
You are given a string s containing lowercase English letters, and a matrix shift, where shift[i] = [direction, amount]:
- direction can be 0 (for left shift) or 1 (for right shift).
- amount is the amount by which string s is to be shifted.
- A left shift by 1 means remove the first character of s and append it to the end.
- Similarly, a right shift by 1 means remove the last character of s and add it to the beginning.
Return the final string after all operations.
Example 1:
Input: s = "abc", shift = [[0,1],[1,2]] Output: "cab" Explanation: [0,1] means shift to left by 1. "abc" -> "bca" [1,2] means shift to right by 2. "bca" -> "cab"
Example 2:
Input: s = "abcdefg", shift = [[1,1],[1,1],[0,2],[1,3]] Output: "efgabcd" Explanation: [1,1] means shift to right by 1. "abcdefg" -> "gabcdef" [1,1] means shift to right by 1. "gabcdef" -> "fgabcde" [0,2] means shift to left by 2. "fgabcde" -> "abcdefg" [1,3] means shift to right by 3. "abcdefg" -> "efgabcd"
Constraints:
- 1 <= s.length <= 100
- s only contains lower case English letters.
- 1 <= shift.length <= 100
- shift[i].length == 2
- 0 <= shift[i][0] <= 1
- 0 <= shift[i][1] <= 100
#1
import java.util.ArrayDeque;
public class Solution{
public String stringShift(String s, int[][] shift) {
ArrayDeque<Character> deque = new ArrayDeque<>();
String r = ""; // result
int n = s.length(), i, d, c; // direction, count
for( i = 0; i < n; i++ )
deque.add( s.charAt(i) );
for( i = 0; i < shift.length; i++ ) {
d = shift[i][0]; c = shift[i][1];
while( c-- > 0 ) {
if( d == 0 ) deque.addLast( deque.pollFirst() );
if( d == 1 ) deque.addFirst( deque.pollLast() );
}
}
for( i = 0; i < n; i++ )
r += deque.pollFirst();
return r;
}
}
#2
public class Solution {
public static String stringShift(String s, int[][] shift) {
String o = s, r = ""; // original, result
int d, c; // direction, count
int n = s.length();
int i, j;
for( i = 0; i < shift.length; i++ ) {
d = shift[i][0]; c = shift[i][1]; //r = "";
while( c-- > 0 ) {
r = "";
if( d == 0 ) {
for( j = 1; j < n; j++ )
r += o.charAt(j);
r += o.charAt(0);
}
if( d == 1 ) {
r += o.charAt(n-1);
for( j = 0; j < n-1; j++ )
r += o.charAt(j);
}
o = r;
}
}
return r;
}
}
반응형
'코딩 문제 풀기 ( Algorithm problem solving ) > 릿코드 ( LeetCode )' 카테고리의 다른 글
[LeetCode] (#1046) Last Stone Weight (0) | 2020.04.30 |
---|---|
[LeetCode] (#155) Min Stack (0) | 2020.04.26 |
[LeetCode] (#844) Backspace String Compare (0) | 2020.04.26 |
[LeetCode] (#876) Middle of the Linked List (0) | 2020.04.26 |
[LeetCode] (#) Counting Elements (0) | 2020.04.26 |