64
64
65
65
<!-- 这里可写通用的实现逻辑 -->
66
66
67
- “ 哈希表”实现。
67
+ ** 方法一: 哈希表**
68
68
69
69
<!-- tabs:start -->
70
70
@@ -77,12 +77,8 @@ class Solution:
77
77
def areSentencesSimilar (self , sentence1 : List[str ], sentence2 : List[str ], similarPairs : List[List[str ]]) -> bool :
78
78
if len (sentence1) != len (sentence2):
79
79
return False
80
- pairs = {(word1, word2) for word1, word2 in similarPairs}
81
- for i in range (len (sentence1)):
82
- similar = (sentence1[i], sentence2[i]) in pairs or (sentence2[i], sentence1[i]) in pairs or sentence1[i] == sentence2[i]
83
- if not similar:
84
- return False
85
- return True
80
+ s = {(a, b) for a, b in similarPairs}
81
+ return all (a == b or (a, b) in s or (b, a) in s for a, b in zip (sentence1, sentence2))
86
82
```
87
83
88
84
### ** Java**
@@ -95,13 +91,13 @@ class Solution {
95
91
if (sentence1. length != sentence2. length) {
96
92
return false ;
97
93
}
98
- Set<String > pairs = new HashSet<> ();
99
- for (List<String > pair : similarPairs) {
100
- pairs . add(pair . get(0 ) + " ." + pair . get(1 ));
94
+ Set<String > s = new HashSet<> ();
95
+ for (List<String > e : similarPairs) {
96
+ s . add(e . get(0 ) + " ." + e . get(1 ));
101
97
}
102
98
for (int i = 0 ; i < sentence1. length; ++ i) {
103
- boolean similar = pairs . contains( sentence1[i] + " . " + sentence2[i]) || pairs . contains(sentence2[i] + " . " + sentence1[i]) || sentence1[i] . equals(sentence2[i]) ;
104
- if (! similar ) {
99
+ String a = sentence1[i], b = sentence2[i];
100
+ if (! a . equals(b) && ! s . contains(a + " . " + b) && ! s . contains(b + " . " + a) ) {
105
101
return false ;
106
102
}
107
103
}
@@ -110,6 +106,47 @@ class Solution {
110
106
}
111
107
```
112
108
109
+ ### ** C++**
110
+
111
+ ``` cpp
112
+ class Solution {
113
+ public:
114
+ bool areSentencesSimilar(vector<string >& sentence1, vector<string >& sentence2, vector<vector<string >>& similarPairs) {
115
+ int m = sentence1.size(), n = sentence2.size();
116
+ if (m != n) return false;
117
+ unordered_set<string > s;
118
+ for (auto e : similarPairs) s.insert(e[ 0] + "." + e[ 1] );
119
+ for (int i = 0; i < n; ++i)
120
+ {
121
+ string a = sentence1[ i] , b = sentence2[ i] ;
122
+ if (a != b && !s.count(a + "." + b) && !s.count(b + "." + a)) return false;
123
+ }
124
+ return true;
125
+ }
126
+ };
127
+ ```
128
+
129
+ ### **Go**
130
+
131
+ ```go
132
+ func areSentencesSimilar(sentence1 []string, sentence2 []string, similarPairs [][]string) bool {
133
+ if len(sentence1) != len(sentence2) {
134
+ return false
135
+ }
136
+ s := map[string]bool{}
137
+ for _, e := range similarPairs {
138
+ s[e[0]+"."+e[1]] = true
139
+ }
140
+ for i, a := range sentence1 {
141
+ b := sentence2[i]
142
+ if a != b && !s[a+"."+b] && !s[b+"."+a] {
143
+ return false
144
+ }
145
+ }
146
+ return true
147
+ }
148
+ ```
149
+
113
150
### ** ...**
114
151
115
152
```
0 commit comments