Skip to content

Commit 549eb1f

Browse files
committed
[String] Update solution to Longest Common Prefix
1 parent 42aebad commit 549eb1f

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed

String/LongestCommonPrefix.swift

+21-16
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,37 @@
11
/**
22
* Question Link: https://leetcode.com/problems/longest-common-prefix/
33
* Primary idea: Use the first string as the result at first, trim it while iterating the array
4-
* Time Complexity: O(nm), Space Complexity: O(m), m stands for the length of first string
4+
* Time Complexity: O(nm), Space Complexity: O(m), m stands for the length of longest prefix
55
*/
66

77
class LongestCommonPrefix {
8-
func longestCommonPrefix(strs: [String]) -> String {
9-
guard strs.count > 0 else {
10-
return ""
8+
func longestCommonPrefix(_ strs: [String]) -> String {
9+
var longestPrefix = [Character](), index = 0
10+
11+
guard let firstStr = strs.first else {
12+
return String(longestPrefix)
1113
}
12-
13-
var res = [Character](strs[0].characters)
1414

15-
for str in strs {
16-
var strContent = [Character](str.characters)
15+
let firstStrChars = Array(firstStr)
16+
let strsChars = strs.map { Array($0) }
17+
18+
while index < firstStr.count {
1719

18-
if res.count > strContent.count {
19-
res = Array(res[0..<strContent.count])
20-
}
20+
longestPrefix.append(firstStrChars[index])
2121

22-
for i in 0..<res.count {
23-
if res[i] != strContent[i] {
24-
res = Array(res[0..<i])
25-
break
22+
for str in strsChars {
23+
if index >= str.count {
24+
return String(longestPrefix.dropLast())
25+
}
26+
27+
if str[index] != longestPrefix[index] {
28+
return String(longestPrefix.dropLast())
2629
}
2730
}
31+
32+
index += 1
2833
}
2934

30-
return String(res)
35+
return String(longestPrefix)
3136
}
3237
}

0 commit comments

Comments
 (0)