54
54
55
55
<!-- 这里可写通用的实现逻辑 -->
56
56
57
+ ** 方法一:模拟**
58
+
59
+ 我们先找到字符 $ch$ 第一次出现的下标 $i$,然后反转从下标 $0$ 开始、直到下标 $i$ 结束(含下标 $i$)的那段字符,最后将反转后的字符串与下标 $i + 1$ 开始的字符串拼接即可。
60
+
61
+ 时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为字符串 $word$ 的长度。
62
+
57
63
<!-- tabs:start -->
58
64
59
65
### ** Python3**
@@ -73,14 +79,30 @@ class Solution:
73
79
74
80
``` java
75
81
class Solution {
82
+ public String reversePrefix (String word , char ch ) {
83
+ int j = word. indexOf(ch);
84
+ if (j == - 1 ) {
85
+ return word;
86
+ }
87
+ char [] cs = word. toCharArray();
88
+ for (int i = 0 ; i < j; ++ i, -- j) {
89
+ char t = cs[i];
90
+ cs[i] = cs[j];
91
+ cs[j] = t;
92
+ }
93
+ return String . valueOf(cs);
94
+ }
95
+ }
96
+ ```
76
97
98
+ ``` java
99
+ class Solution {
77
100
public String reversePrefix (String word , char ch ) {
78
- int i = word. indexOf(ch);
79
- return i == - 1 ? word
80
- : new StringBuilder (word. substring(0 , i + 1 ))
81
- .reverse()
82
- .append(word. substring(i + 1 ))
83
- .toString();
101
+ int j = word. indexOf(ch);
102
+ if (j == - 1 ) {
103
+ return word;
104
+ }
105
+ return new StringBuilder (word. substring(0 , j + 1 )). reverse(). append(word. substring(j + 1 )). toString();
84
106
}
85
107
}
86
108
```
@@ -92,7 +114,9 @@ class Solution {
92
114
public:
93
115
string reversePrefix(string word, char ch) {
94
116
int i = word.find(ch);
95
- if (i != string::npos) reverse(word.begin(), word.begin() + i + 1);
117
+ if (i != string::npos) {
118
+ reverse(word.begin(), word.begin() + i + 1);
119
+ }
96
120
return word;
97
121
}
98
122
};
@@ -119,9 +143,11 @@ func reversePrefix(word string, ch byte) string {
119
143
120
144
``` ts
121
145
function reversePrefix(word : string , ch : string ): string {
122
- let idx = word .indexOf (ch ) + 1 ;
123
- if (! idx ) return word ;
124
- return [... word .substring (0 , idx )].reverse ().join (' ' ) + word .substring (idx );
146
+ const i = word .indexOf (ch ) + 1 ;
147
+ if (! i ) {
148
+ return word ;
149
+ }
150
+ return [... word .slice (0 , i )].reverse ().join (' ' ) + word .slice (i );
125
151
}
126
152
```
127
153
0 commit comments