在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ For strings Return the largest string Example 1: Input: str1 = Example 2: Input: str1 = Example 3: Input: str1 = Note:
对于字符串 返回字符串 示例 1: 输入:str1 = "ABCABC", str2 = "ABC" 输出:"ABC" 示例 2: 输入:str1 = "ABABAB", str2 = "ABAB" 输出:"AB" 示例 3: 输入:str1 = "LEET", str2 = "CODE" 输出:"" 提示:
Runtime: 12 ms
Memory Usage: 21.1 MB
1 class Solution { 2 func gcdOfStrings(_ str1: String, _ str2: String) -> String { 3 var str1 = str1 4 var str2 = str2 5 let arrStr1:[Character] = Array(str1) 6 let arrStr2:[Character] = Array(str2) 7 var n:Int = str1.count 8 var m:Int = str2.count 9 10 for i in stride(from:n,to:0,by:-1) 11 { 12 if (n % i != 0) || (m % i != 0) {continue} 13 var flag:Bool = false 14 for j in 0..<m 15 { 16 if arrStr2[j] != arrStr1[j % i] 17 { 18 flag = true 19 break 20 } 21 } 22 if flag {continue} 23 for j in 0..<n 24 { 25 if arrStr1[j] != arrStr1[j % i] 26 { 27 flag = true 28 break 29 } 30 } 31 if flag {continue} 32 return str1.subString(0, i) 33 } 34 return String() 35 } 36 } 37 38 extension String { 39 // 截取字符串:指定索引和字符数 40 // - begin: 开始截取处索引 41 // - count: 截取的字符数量 42 func subString(_ begin:Int,_ count:Int) -> String { 43 let start = self.index(self.startIndex, offsetBy: max(0, begin)) 44 let end = self.index(self.startIndex, offsetBy: min(self.count, begin + count)) 45 return String(self[start..<end]) 46 } 47 } 56ms
1 class Solution { 2 func gcdOfStrings(_ str1: String, _ str2: String) -> String { 3 let shorterStr: String 4 let longerStr: String 5 if str1.count > str2.count { 6 longerStr = str1 7 shorterStr = str2 8 } else { 9 longerStr = str2 10 shorterStr = str1 11 } 12 13 for i in stride(from: shorterStr.count, to: 1, by: -1) where shorterStr.count % i == 0 && longerStr.count % i == 0 { 14 let range = shorterStr.startIndex..<shorterStr.index(shorterStr.startIndex, offsetBy: i) 15 let t = String(shorterStr[range]) 16 guard shorterStr == String(repeating: t, count: shorterStr.count / i) else { continue } 17 guard longerStr == String(repeating: t, count: longerStr.count / i) else { continue } 18 return t 19 } 20 return "" 21 } 22 } 120ms 1 class Solution { 2 func gcdOfStrings(_ str1: String, _ str2: String) -> String { 3 let (long, short) = str1.count > str2.count ? (str1, str2) : (str2, str1) 4 let common = long.commonPrefix(with: short) 5 var mu = [Substring]() 6 for i in 1...short.count { 7 if short.count % i == 0 { 8 mu.append(short.prefix(short.count / i)) 9 } 10 } 11 for m in mu { 12 let s = String(m) 13 if long == String(repeating: s, count: long.count/s.count) && 14 short == String(repeating: s, count: short.count/s.count) { 15 return s 16 } 17 } 18 return "" 19 } 20 } 184ms 1 class Solution { 2 func gcdOfStrings(_ str1: String, _ str2: String) -> String { 3 let shortestString = str1 > str2 ? str2 : str1 4 let longestString = str1 <= str2 ? str2 : str1 5 print(shortestString) 6 guard longestString.range(of: shortestString) != nil else { return "" } 7 if longestString.count % shortestString.count == 0 { 8 let timesGreater = longestString.count / shortestString.count 9 return isRepeatative(substring: shortestString, in: longestString, times: timesGreater) ? shortestString : "" 10 } else { 11 let substrs = getSubstring(shortestString) 12 var longestSubstring = "" 13 for substr in substrs { 14 if longestString.count % substr.count == 0 { 15 let times = longestString.count / substr.count 16 if isRepeatative(substring: substr, in: longestString, times: times) && substr.count > longestSubstring.count { 17 longestSubstring = substr 18 } 19 } 20 } 21 return longestSubstring 22 } 23 } 24 25 func isRepeatative(substring: String, in string: String, times: Int) -> Bool { 26 var str = "" 27 for _ in 0..<times { 28 str.append(substring) 29 } 30 return string == str 31 } 32 33 func getSubstring(_ string: String) -> [String] { 34 let startIndex = string.startIndex 35 var substrings = [string] 36 for i in 2..<string.count { 37 let stopIndex = String.Index.init(encodedOffset: string.count / i) 38 let substring = String(string[startIndex..<stopIndex]) 39 if isRepeatative(substring: substring, in: string, times: i) { 40 substrings.append(substring) 41 } 42 } 43 return substrings 44 } 45 }
|
请发表评论