Дан слайс строк, нужно вернуть строку содержащую общий префикс для всех строк, пустую сроку в случае отсутствия такового.
| Go | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
| // [url]https://leetcode.com/studyplan/top-interview-150/[/url]
package topInterview
// longestCommonPrefix
//
// 14. Longest Common Prefix
//
// Write a function to find the longest common prefix string amongst an array of strings.
//
// If there is no common prefix, return an empty string "".
//
// Example 1:
//
// Input: strs = ["flower","flow","flight"]
// Output: "fl"
// Example 2:
//
// Input: strs = ["dog","racecar","car"]
// Output: ""
// Explanation: There is no common prefix among the input strings.
//
// Constraints:
//
// 1 <= strs.length <= 200
// 0 <= strs[i].length <= 200
// strs[i] consists of only lowercase English letters if it is non-empty.//
func longestCommonPrefix(strs []string) string {
// Далее minLength инициируется длиной первой строки в strs
// необходимо проверить что этот элемент есть
if len(strs) == 0 {
return ""
}
// Инициируем переменную minLength длиной первого элемента strs
minLength := len(strs[0])
// Обходим strs вычисляем минимум длины среди элементов strs
for i := 1; i < len(strs); i++ {
minLength = min(minLength, len(strs[i]))
}
// Если минимальная длина 0 возвращаем пустую сроку
if minLength == 0 {
return ""
}
// Тут крайний индекс префикса
prefixCharsCounter := 0
// rootLoop: это метка так как цикл может быть прерван из внутреннего цикла
rootLoop:
// Цикл по диапазону [0..minLength-1]
for i := range minLength {
// Текущий байт первого элемента будет эталоном
// с которым будем сравнивать остальные байты элементов strs
reference := strs[0][i]
// Обходим strs
for j := 1; j < len(strs); j++ {
// Если текущий байт в текущем элементе strs не совпадает с эталоном
if reference != strs[j][i] {
// Перерываем внешний цикл rootLoop
break rootLoop
}
}
// Актуализируем крайний индекс префикса
prefixCharsCounter++
}
// Возвращаем префикс первого элемента strs
return strs[0][0:prefixCharsCounter]
} |
|
| Go | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| func TestLongestCommonPrefix(t *testing.T) {
data := []struct {
strs []string
expected string
}{
{[]string{"flower", "flow", "flight"}, "fl"},
{[]string{"dog", "racecar", "car"}, ""},
}
for i, datum := range data {
result := longestCommonPrefix(datum.strs)
if result != datum.expected {
t.Errorf(
"unexpected result for test data index %d (%+v), expected [%s], but got [%s]",
i,
datum.strs,
datum.expected,
result,
)
}
}
} |
|
| Code | 1
2
3
| === RUN TestLongestCommonPrefix
--- PASS: TestLongestCommonPrefix (0.00s)
PASS |
|
|
|