Skip to content

Commit c3940e9

Browse files
committed
feat: add solutions to lcci problem: No.01.09
No.01.09.String Rotation
1 parent b8cb983 commit c3940e9

File tree

5 files changed

+45
-13
lines changed

5 files changed

+45
-13
lines changed

lcci/01.09.String Rotation/README.md

+24-9
Original file line numberDiff line numberDiff line change
@@ -38,31 +38,35 @@
3838

3939
<!-- 这里可写通用的实现逻辑 -->
4040

41-
字符串只是旋转的,将前后拼接起来,就能得到一个包含旋转前字符串在内的新字符串。如:
41+
**方法一:字符串匹配**
4242

43-
```txt
43+
首先,如果字符串 $s1$ 和 $s2$ 长度不相等,那么肯定不是旋转字符串。
44+
45+
其次,如果字符串 $s1$ 和 $s2$ 长度相等,那么将两个 $s1$ 连接,得到的 $s1 + s1$ 这个字符串一定包含了 $s1$ 旋转的所有情况,这时候我们只要判断 $s2$ 是否是 $s1 + s1$ 的子串即可。
46+
47+
```bash
4448
# 成立
4549
s1 = "aba"
4650
s2 = "baa"
47-
s3 = "baabaa" = s2 + s2
48-
^^^
49-
```
51+
s1 + s1 = "abaaba"
52+
^^^
5053

51-
```txt
5254
# 不成立
5355
s1 = "aba"
5456
s2 = "bab"
55-
s3 = "babbab" = s2 + s2
57+
s1 + s1 = "abaaba"
5658
```
5759

60+
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为字符串 $s1$ 的长度。
61+
5862
<!-- tabs:start -->
5963

6064
### **Python3**
6165

6266
```python
6367
class Solution:
6468
def isFlipedString(self, s1: str, s2: str) -> bool:
65-
return len(s1) == len(s2) and s1 in (s2 * 2)
69+
return len(s1) == len(s2) and s2 in s1 * 2
6670
```
6771

6872
### **Java**
@@ -72,11 +76,22 @@ class Solution:
7276
```java
7377
class Solution {
7478
public boolean isFlipedString(String s1, String s2) {
75-
return s1.length() == s2.length() && (s2 + s2).indexOf(s1) != -1;
79+
return s1.length() == s2.length() && (s1 + s1).contains(s2);
7680
}
7781
}
7882
```
7983

84+
### **C++**
85+
86+
```cpp
87+
class Solution {
88+
public:
89+
bool isFlipedString(string s1, string s2) {
90+
return s1.size() == s2.size() && (s1 + s1).find(s2) != string::npos;
91+
}
92+
};
93+
```
94+
8095
### **Go**
8196
8297
```go

lcci/01.09.String Rotation/README_EN.md

+13-2
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,30 @@
4343
```python
4444
class Solution:
4545
def isFlipedString(self, s1: str, s2: str) -> bool:
46-
return len(s1) == len(s2) and s1 in (s2 * 2)
46+
return len(s1) == len(s2) and s2 in s1 * 2
4747
```
4848

4949
### **Java**
5050

5151
```java
5252
class Solution {
5353
public boolean isFlipedString(String s1, String s2) {
54-
return s1.length() == s2.length() && (s2 + s2).indexOf(s1) != -1;
54+
return s1.length() == s2.length() && (s1 + s1).contains(s2);
5555
}
5656
}
5757
```
5858

59+
### **C++**
60+
61+
```cpp
62+
class Solution {
63+
public:
64+
bool isFlipedString(string s1, string s2) {
65+
return s1.size() == s2.size() && (s1 + s1).find(s2) != string::npos;
66+
}
67+
};
68+
```
69+
5970
### **Go**
6071
6172
```go
+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class Solution {
2+
public:
3+
bool isFlipedString(string s1, string s2) {
4+
return s1.size() == s2.size() && (s1 + s1).find(s2) != string::npos;
5+
}
6+
};
+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
class Solution {
22
public boolean isFlipedString(String s1, String s2) {
3-
return s1.length() == s2.length() && (s2 + s2).indexOf(s1) != -1;
3+
return s1.length() == s2.length() && (s1 + s1).contains(s2);
44
}
55
}
+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
class Solution:
22
def isFlipedString(self, s1: str, s2: str) -> bool:
3-
return len(s1) == len(s2) and s1 in (s2 * 2)
3+
return len(s1) == len(s2) and s2 in s1 * 2

0 commit comments

Comments
 (0)