Сегодня мой 61-й день кодинга. я решил 2 задачи
Проблема 1: повернуть строку
Имея две строки s
и goal
, вернуть true
в том и только в том случае, если s
может стать goal
после некоторого количества сдвигов на s
.
Сдвиг на s
состоит в перемещении самого левого символа s
в крайнее правое положение.
- Например, если
s = "abcde"
, то через одну смену будет"bcdea"
.
Пример 1:
Input: s = "abcde", goal = "cdeab" Output: true
Пример 2:
Input: s = "abcde", goal = "abced" Output: false
Ограничения:
1 <= s.length, goal.length <= 100
s
иgoal
состоят из строчных английских букв.
Решение (в Java):
class Solution { public boolean rotateString(String s, String goal) { Queue<Character> q1= new LinkedList<>(); Queue<Character> q2 = new LinkedList<>(); for(int i=0; i<s.length(); i++) q1.add(s.charAt(i)); for(int i=0; i<goal.length(); i++) q2.add(goal.charAt(i)); int k=goal.length(); while(k>0){ char ch=q2.peek(); q2.remove(); q2.add(ch); if(q2.equals(q1)) return true; k--; } return false; } }
Задача 2: перетасовать строку
Вам задана строка s
и массив целых чисел indices
одинаковой длины. Строка s
будет перемешана таким образом, что символ в позиции ith
переместится на indices[i]
в перемешанной строке.
Вернуть перетасованную строку.
Пример 1:
Input: s = "codeleet", indices = [4,5,6,7,0,2,1,3] Output: "leetcode" Explanation: As shown, "codeleet" becomes "leetcode" after shuffling.
Пример 2:
Input: s = "abc", indices = [0,1,2] Output: "abc" Explanation: After shuffling, each character remains in its position.
Ограничения:
s.length == indices.length == n
1 <= n <= 100
s
состоит только из строчных английских букв.0 <= indices[i] < n
- Все значения
indices
являются уникальными.
Решение (в Java):
class Solution { public String restoreString(String s, int[] indices) { Map< Integer , Character> hm= new HashMap<>(); String S=""; for( int i=0; i<s.length(); i++) hm.put( indices[i], s.charAt(i)); for(int i=0; i<s.length(); i++) S+=hm.get(i); return S; } }