#双指针 classSolution: defreverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ i, j = 0, len(s) - 1 while i < j: s[i], s[j] = s[j], s[i] i += 1 j -= 1
1 2 3 4 5 6 7
#使用库函数,不推荐 classSolution: defreverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ s.reverse()
1 2 3 4 5 6 7 8 9 10 11
#栈 classSolution: defreverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ stack = [] for char in s: stack.append(char) for i inrange(len(s)): s[i] = stack.pop()
1 2 3 4 5 6 7 8
classSolution: defreverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ n = len(s) for i inrange(n // 2): s[i], s[n - i - 1] = s[n - i - 1], s[i]
1 2 3 4 5 6 7 8
#s = s[::-1] 创建一个新的列表对象,并将变量 s 指向这个新对象。 #s[:] = s[::-1] 在原地修改列表,将原始列表的元素替换为反转后的元素。 classSolution: defreverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ s[:] = s[::-1]
1 2 3 4 5 6
classSolution: defreverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ s[:] = [s[i] for i inrange(len(s) - 1, -1, -1)]
Go:
1 2 3 4 5 6 7 8 9
//双指针 funcreverseString(s []byte) { i, j := 0, len(s)-1 for i < j { s[i], s[j] = s[j], s[i] i++ j-- } }
1 2 3 4 5 6
funcreverseString(s []byte) { for left, right := 0, len(s)-1; left < right; left++ { s[left], s[right] = s[right], s[left] right-- } }
1 2 3 4 5 6
funcreverseString(s []byte) { l := len(s) for i := 0; i < l/2; i++ { s[i], s[l-i-1] = s[l-i-1], s[i] } }
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1:
1 2
输入:s = "abcdefg", k = 2 输出:"bacdfeg"
示例 2:
1 2
输入:s = "abcd", k = 2 输出:"bacd"
提示:
1 <= s.length <= 10^4
s 仅由小写英文组成
1 <= k <= 10^4
Python:
1 2 3 4 5 6 7
#官方解法 classSolution: defreverseStr(self, s: str, k: int) -> str: t = list(s) for i inrange(0, len(t), 2 * k): t[i: i + k] = reversed(t[i: i + k]) return"".join(t)
1 2 3 4 5 6 7 8 9 10 11 12 13
classSolution: defreverseStr(self, s: str, k: int) -> str: b = list(s) for i inrange(0, len(b), 2 * k): left = i right = min(i + k - 1, len(b) - 1) self.reverseString(b, left, right) return"".join(b) defreverseString(self, s: List[str], start: int, end: int) -> None: while start < end: s[start], s[end] = s[end], s[start] start += 1 end -= 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
classSolution: defreverseStr(self, s: str, k: int) -> str: l = len(s) i = 0 chars = list(s) while i <= l - 2 * k: self.reverseString(chars, i, i + k - 1) i += 2 * k if l - i < k: self.reverseString(chars, i, l - 1) else: self.reverseString(chars, i, i + k - 1) return"".join(chars) defreverseString(self, s: List[str], start: int, end: int) -> None: i, j = start, end while i < j: s[i], s[j] = s[j], s[i] i += 1 j -= 1
funcreverseStr(s string, k int)string { l := len(s) i := 0 chars := []byte(s) for ; i <= l-2*k; i += 2 * k { reverseString(chars[i : i+k]) } if l-i < k { reverseString(chars[i:l]) } else { reverseString(chars[i : i+k]) } returnstring(chars) }
funcreverseString(str []byte) { i, j := 0, len(str)-1 for i < j { str[i], str[j] = str[j], str[i] i++ j-- } }
funcreverseStr(s string, k int)string { b := []byte(s) for i := 0; i < len(b); i += 2 * k { left := i right := i + k - 1 if right > len(b)-1 { right = len(b) - 1 } b = reverseString(b, left, right) } returnstring(b) }
funcreverseString(b []byte, i, j int) []byte { for i < j { b[i], b[j] = b[j], b[i] i++ j-- } return b }
#本人解法 classSolution: defreverseWords(self, s: str) -> str: i = 0 arr = [] l = len(s) while i < l: if s[i] != ' ': left, right = i, i while right < l: if s[right] == ' ': arr.append(s[left:right]) break elif right == l - 1: arr.append(s[left:right + 1]) i = right right += 1 i += 1 l = len(arr) result = arr[-1] if l == 1: return result for i inrange(l - 2, -1, -1): result += " " + arr[i] return result
//本人解法 funcreverseWords(s string) (out string) { i := 0 arr := make([]string, 0) l := len(s) for ; i < l; i++ { if s[i] != ' ' { left, right := i, i for ; right < l; right++ { if s[right] == ' ' { arr = append(arr, s[left:right]) break } elseif right == l-1 { arr = append(arr, s[left:right+1]) } i = right } } } l = len(arr) var builder strings.Builder builder.WriteString(arr[len(arr)-1]) if l == 1 { return builder.String() } for i = len(arr) - 2; i >= 0; i-- { builder.WriteString(" " + arr[i]) } return builder.String() }
classSolution: defstrStr(self, haystack: str, needle: str) -> int: n, m = len(haystack), len(needle) for i inrange(n - m + 1): for j inrange(m): if haystack[i + j] != needle[j]: break else: return i return -1
1 2 3 4 5 6
classSolution: defstrStr(self, haystack: str, needle: str) -> int: for i inrange(len(haystack) - len(needle) + 1): if haystack[i : i + len(needle)] == needle: return i return -1
funcstrStr(haystack string, needle string)int { for i := 0; i < len(haystack)-len(needle)+1; i++ { if haystack[i:i+len(needle)] == needle { return i } } return-1 }
1 2 3 4 5 6 7 8 9 10 11 12 13
funcstrStr(haystack, needle string)int { n, m := len(haystack), len(needle) outer: for i := 0; i+m <= n; i++ { for j := range needle { if haystack[i+j] != needle[j] { continue outer } } return i } return-1 }
classSolution: defrepeatedSubstringPattern(self, s: str) -> bool: l = len(s) for i inrange(1, l // 2 + 1): if l % i == 0: tmp = s[:i] j = i while j <= l - i: if s[j : j + i] != tmp: break j += i if j == l: returnTrue returnFalse
1 2 3 4 5 6 7 8 9 10 11 12 13
classSolution: defrepeatedSubstringPattern(self, s: str) -> bool: n = len(s) for i inrange(1, n // 2 + 1): if n % i == 0: match = True for j inrange(i, n): if s[j] != s[j - i]: match = False break ifmatch: returnTrue returnFalse
classSolution: defrepeatedSubstringPattern(self, s: str) -> bool: n = len(s) for i inrange(1, n // 2 + 1): if n % i == 0: ifall(s[j] == s[j - i] for j inrange(i, n)): returnTrue returnFalse
//本人解法 funcrepeatedSubstringPattern(s string)bool { l := len(s) outer: for i := 1; i <= l/2; i++ { if l%i == 0 { tmp := s[:i] j := i for ; j <= l-i; j += i { if s[j:j+i] != tmp { continue outer } } if j == l { returntrue } } } returnfalse }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
funcrepeatedSubstringPattern(s string)bool { n := len(s) for i := 1; i * 2 <= n; i++ { if n % i == 0 { match := true for j := i; j < n; j++ { if s[j] != s[j - i] { match = false break } } if match { returntrue } } } returnfalse }