55
55
56
56
<!-- 这里可写通用的实现逻辑 -->
57
57
58
+ 把句子分割成单词数组,然后通过公共前后缀进行判断
59
+
58
60
<!-- tabs:start -->
59
61
60
62
### ** Python3**
@@ -73,15 +75,14 @@ class Solution:
73
75
sentence1, sentence2 = sentence2, sentence1
74
76
words1, words2 = sentence1.split(), sentence2.split()
75
77
i = j = 0
76
- while i < len (words2) and words1[i] == words2[i]:
78
+ n1, n2 = len (words1), len (words2)
79
+ while i < n2 and words1[i] == words2[i]:
77
80
i += 1
78
- if i == len (words2) :
81
+ if i == n2 :
79
82
return True
80
- while j < len (words2) and words1[len (words1) - 1 - j] == words2[len (words2) - 1 - j]:
83
+ while j < n2 and words1[n1 - 1 - j] == words2[n2 - 1 - j]:
81
84
j += 1
82
- if j == len (words2):
83
- return True
84
- return i + j == len (words2)
85
+ return j == n2 or i + j == n2
85
86
```
86
87
87
88
### ** Java**
@@ -91,7 +92,7 @@ class Solution:
91
92
``` java
92
93
class Solution {
93
94
public boolean areSentencesSimilar (String sentence1 , String sentence2 ) {
94
- if (Objects . equals(sentence1, sentence2)) {
95
+ if (sentence1 . equals(sentence2)) {
95
96
return true ;
96
97
}
97
98
int n1 = sentence1. length(), n2 = sentence2. length();
@@ -106,23 +107,90 @@ class Solution {
106
107
String [] words1 = sentence1. split(" " );
107
108
String [] words2 = sentence2. split(" " );
108
109
int i = 0 , j = 0 ;
109
- while (i < words2. length && Objects . equals(words1[i], words2[i])) {
110
+ n1 = words1. length;
111
+ n2 = words2. length;
112
+ while (i < n2 && words1[i]. equals(words2[i])) {
110
113
++ i;
111
114
}
112
- if (i == words2 . length ) {
115
+ if (i == n2 ) {
113
116
return true ;
114
117
}
115
- while (j < words2 . length && Objects . equals( words1[words1 . length - 1 - j], words2[words2 . length - 1 - j])) {
118
+ while (j < n2 && words1[n1 - 1 - j]. equals( words2[n2 - 1 - j])) {
116
119
++ j;
117
120
}
118
- if (j == words2. length) {
119
- return true ;
120
- }
121
- return i + j == words2. length;
121
+ return j == n2 || i + j == n2;
122
122
}
123
123
}
124
124
```
125
125
126
+ ### ** Go**
127
+
128
+ ``` go
129
+ func areSentencesSimilar (sentence1 string , sentence2 string ) bool {
130
+ if sentence1 == sentence2 {
131
+ return true
132
+ }
133
+ l1 , l2 := len (sentence1), len (sentence2)
134
+ if l1 == l2 {
135
+ return false
136
+ }
137
+ if l1 < l2 {
138
+ sentence1, sentence2 = sentence2, sentence1
139
+ }
140
+ i , j := 0 , 0
141
+ w1 , w2 := strings.Fields (sentence1), strings.Fields (sentence2)
142
+ l1, l2 = len (w1), len (w2)
143
+ for i < l2 && w1[i] == w2[i] {
144
+ i++
145
+ }
146
+ if i == l2 {
147
+ return true
148
+ }
149
+ for j < l2 && w1[l1-1 -j] == w2[l2-1 -j] {
150
+ j++
151
+ }
152
+ return j == l2 || i+j == l2
153
+ }
154
+ ```
155
+
156
+ ### ** C++**
157
+
158
+ ``` cpp
159
+ class Solution {
160
+ public:
161
+ bool areSentencesSimilar(string sentence1, string sentence2) {
162
+ if (sentence1 == sentence2) return true;
163
+ int n1 = sentence1.size(), n2 = sentence2.size();
164
+ if (n1 == n2) return false;
165
+
166
+ if (n1 < n2) swap(sentence1, sentence2);
167
+ auto words1 = split(sentence1);
168
+ auto words2 = split(sentence2);
169
+ int i = 0, j = 0;
170
+ n1 = words1.size(), n2 = words2.size();
171
+
172
+ while (i < n2 && words1[i] == words2[i]) ++i;
173
+ if (i == n2) return true;
174
+
175
+ while (j < n2 && words1[n1 - 1 - j] == words2[n2 - 1 - j]) ++j;
176
+ return j == n2 || i + j == n2;
177
+ }
178
+
179
+ vector<string> split (const string &str) {
180
+ vector<string > words;
181
+ int i = str.find_first_not_of(' ');
182
+ int j = str.find_first_of(' ', i);
183
+ while (j != string::npos) {
184
+ words.emplace_back(str.substr(i, j - i));
185
+ i = str.find_first_not_of(' ', j);
186
+ j = str.find_first_of(' ', i);
187
+ }
188
+ words.emplace_back(str.substr(i));
189
+ return words;
190
+ }
191
+ };
192
+ ```
193
+
126
194
### **...**
127
195
128
196
```
0 commit comments