Skip to content

Commit 1c74c95

Browse files
committed
StringTransformation: fix & add Youtube link
1 parent 7a35db8 commit 1c74c95

File tree

3 files changed

+17
-15
lines changed

3 files changed

+17
-15
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ they contain enough code which describes implementation in a natural way.
221221
| Подсчет единиц в бинарной записи числа (leetcode) | [Youtube](https://youtu.be/F8zwvJYw0R8) | [Code](src/main/java/by/andd3dfx/numeric/CountOnesInBinaryForm.java) |
222222
| Ревью кода из интервью #4 (LIVE) | [Youtube](https://youtu.be/Y84nyje-U1c) | - |
223223
| Ревью кода из интервью #5 (LIVE) | [Youtube](https://youtu.be/WT6wfFsNmxo) | - |
224+
| Проверка возможности получения одной строки из другой за одно изменение | [Youtube](https://youtu.be/GOSWr4jHng8) | [Code](src/main/java/by/andd3dfx/string/StringTransformation.java) |
224225

225226
## Materials & notes
226227

src/main/java/by/andd3dfx/string/StringTransformation.java

+11-10
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,26 @@
22

33
import org.apache.commons.lang3.StringUtils;
44

5-
import static org.apache.commons.lang3.StringUtils.substring;
6-
75
/**
6+
* <pre>
87
* Написать метод (класс и импорты не нужны) на вход которого приходит две строки.
98
* На выходе надо проверить можно ли получить одну строку из другой за 1 исправление:
109
* - замена одного символа в одной строке
1110
* - вставка/удаление одного символа из одной строки
12-
* <p>
11+
*
1312
* Примеры тестовых сценариев:
1413
* first = "a", second = "b" -> true
1514
* first = "ab", second = "b" -> true
1615
* first = "ab", second = "cb" -> true
1716
* first = "ab", second = "ba" -> false
1817
* first = "abcd", second = "abd" -> true
18+
* </pre>
1919
*/
2020
public class StringTransformation {
2121

2222
public static boolean couldTransform(String first, String second) {
23-
var s1 = first.toCharArray();
24-
var s2 = second.toCharArray();
23+
char[] s1 = first.toCharArray();
24+
char[] s2 = second.toCharArray();
2525

2626
var len1 = s1.length;
2727
var len2 = s2.length;
@@ -43,25 +43,26 @@ public static boolean couldTransform(String first, String second) {
4343
return true;
4444
}
4545

46-
// Lengths differ by 1 - need to remove/add one character
46+
// Lengths differ by 1 - so need to remove/add one character
4747
var pos = 0;
4848
while (pos < len1 && pos < len2 && s1[pos] == s2[pos]) {
4949
pos++;
5050
}
5151

52-
if (pos + 1 < len1 && s1[pos + 1] == s2[pos]) {
52+
if (pos + 1 < len1 && pos < len2 && s1[pos + 1] == s2[pos]) {
5353
return remainingPartsShouldBeEqual(first, pos + 1, second, pos);
5454
}
55-
if (pos + 1 < len2 && s1[pos] == s2[pos + 1]) {
55+
if (pos < len1 && pos + 1 < len2 && s1[pos] == s2[pos + 1]) {
5656
return remainingPartsShouldBeEqual(first, pos, second, pos + 1);
5757
}
58+
5859
return true;
5960
}
6061

6162
private static boolean remainingPartsShouldBeEqual(String first, int from1, String second, int from2) {
6263
return StringUtils.equals(
63-
substring(first, from1),
64-
substring(second, from2)
64+
first.substring(from1),
65+
second.substring(from2)
6566
);
6667
}
6768
}

src/test/java/by/andd3dfx/string/StringTransformationTest.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,21 @@ public void couldTransform_changeOneChar() {
1616

1717
@Test
1818
public void couldTransform_removeOneChar() {
19-
assertThat(couldTransform("abcd", "abc")).isTrue(); // remove one (last) char
2019
assertThat(couldTransform("abcd", "bcd")).isTrue(); // remove one (first) char
21-
assertThat(couldTransform("abcd", "abd")).isTrue(); // remove one (inner) char
20+
assertThat(couldTransform("abcd", "acd")).isTrue(); // remove one (inner) char
21+
assertThat(couldTransform("abcd", "abc")).isTrue(); // remove one (last) char
2222
}
2323

2424
@Test
2525
public void couldTransform_addOneChar() {
26-
assertThat(couldTransform("abc", "abcd")).isTrue(); // add one (last) char
2726
assertThat(couldTransform("bcd", "abcd")).isTrue(); // add one (first) char
2827
assertThat(couldTransform("abd", "abcd")).isTrue(); // add one (inner) char
28+
assertThat(couldTransform("abc", "abcd")).isTrue(); // add one (last) char
2929
}
3030

3131
@Test
3232
public void couldTransform_significantlyDifferentLengths() {
33-
assertThat(couldTransform("abcd", "bc")).isFalse();
33+
assertThat(couldTransform("abcd", "ab")).isFalse();
3434
assertThat(couldTransform("bc", "abcd")).isFalse();
3535
}
3636

@@ -40,4 +40,4 @@ public void couldTransform_transformIsNotPossible() {
4040
assertThat(couldTransform("abcde", "abdm")).isFalse(); // different lengths
4141
assertThat(couldTransform("abdm", "abcde")).isFalse(); // different lengths
4242
}
43-
}
43+
}

0 commit comments

Comments
 (0)