|
62 | 62 |
|
63 | 63 | <!-- 这里可写通用的实现逻辑 -->
|
64 | 64 |
|
| 65 | +**方法一:双指针** |
| 66 | + |
| 67 | +我们定义两个指针 $i$ 和 $j$ 分别指向字符串 $s$ 的头部和尾部,然后向中间移动,直到 $i$ 和 $j$ 指向的字符不相等,此时 $\max(0, j - i + 1)$ 即为答案。 |
| 68 | + |
| 69 | +时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为字符串 $s$ 的长度。 |
| 70 | + |
65 | 71 | <!-- tabs:start -->
|
66 | 72 |
|
67 | 73 | ### **Python3**
|
68 | 74 |
|
69 | 75 | <!-- 这里可写当前语言的特殊实现逻辑 -->
|
70 | 76 |
|
71 | 77 | ```python
|
72 |
| - |
| 78 | +class Solution: |
| 79 | + def minimumLength(self, s: str) -> int: |
| 80 | + i, j = 0, len(s) - 1 |
| 81 | + while i < j and s[i] == s[j]: |
| 82 | + while i + 1 < j and s[i] == s[i + 1]: |
| 83 | + i += 1 |
| 84 | + while i < j - 1 and s[j - 1] == s[j]: |
| 85 | + j -= 1 |
| 86 | + i, j = i + 1, j - 1 |
| 87 | + return max(0, j - i + 1) |
73 | 88 | ```
|
74 | 89 |
|
75 | 90 | ### **Java**
|
76 | 91 |
|
77 | 92 | <!-- 这里可写当前语言的特殊实现逻辑 -->
|
78 | 93 |
|
79 | 94 | ```java
|
| 95 | +class Solution { |
| 96 | + public int minimumLength(String s) { |
| 97 | + int i = 0, j = s.length() - 1; |
| 98 | + while (i < j && s.charAt(i) == s.charAt(j)) { |
| 99 | + while (i + 1 < j && s.charAt(i) == s.charAt(i + 1)) { |
| 100 | + ++i; |
| 101 | + } |
| 102 | + while (i < j - 1 && s.charAt(j) == s.charAt(j - 1)) { |
| 103 | + --j; |
| 104 | + } |
| 105 | + ++i; |
| 106 | + --j; |
| 107 | + } |
| 108 | + return Math.max(0, j - i + 1); |
| 109 | + } |
| 110 | +} |
| 111 | +``` |
| 112 | + |
| 113 | +### **C++** |
| 114 | + |
| 115 | +```cpp |
| 116 | +class Solution { |
| 117 | +public: |
| 118 | + int minimumLength(string s) { |
| 119 | + int i = 0, j = s.size() - 1; |
| 120 | + while (i < j && s[i] == s[j]) { |
| 121 | + while (i + 1 < j && s[i] == s[i + 1]) { |
| 122 | + ++i; |
| 123 | + } |
| 124 | + while (i < j - 1 && s[j] == s[j - 1]) { |
| 125 | + --j; |
| 126 | + } |
| 127 | + ++i; |
| 128 | + --j; |
| 129 | + } |
| 130 | + return max(0, j - i + 1); |
| 131 | + } |
| 132 | +}; |
| 133 | +``` |
80 | 134 |
|
| 135 | +### **Go** |
| 136 | +
|
| 137 | +```go |
| 138 | +func minimumLength(s string) int { |
| 139 | + i, j := 0, len(s)-1 |
| 140 | + for i < j && s[i] == s[j] { |
| 141 | + for i+1 < j && s[i] == s[i+1] { |
| 142 | + i++ |
| 143 | + } |
| 144 | + for i < j-1 && s[j] == s[j-1] { |
| 145 | + j-- |
| 146 | + } |
| 147 | + i, j = i+1, j-1 |
| 148 | + } |
| 149 | + return max(0, j-i+1) |
| 150 | +} |
| 151 | +
|
| 152 | +func max(a, b int) int { |
| 153 | + if a > b { |
| 154 | + return a |
| 155 | + } |
| 156 | + return b |
| 157 | +} |
81 | 158 | ```
|
82 | 159 |
|
83 | 160 | ### **...**
|
|
0 commit comments