Skip to content

Commit 74411c8

Browse files
committedMar 11, 2021
feat: update solutions to leetcode problem: No.0953
1 parent 90a1126 commit 74411c8

File tree

4 files changed

+118
-25
lines changed

4 files changed

+118
-25
lines changed
 

‎solution/0900-0999/0953.Verifying an Alien Dictionary/README.md

+43-2
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,56 @@
5252
<!-- 这里可写当前语言的特殊实现逻辑 -->
5353

5454
```python
55-
55+
class Solution:
56+
def isAlienSorted(self, words: List[str], order: str) -> bool:
57+
index = {v: k for k, v in enumerate(order)}
58+
for i in range(len(words) - 1):
59+
word1, word2 = words[i], words[i + 1]
60+
len1, len2 = len(word1), len(word2)
61+
flag = True
62+
for j in range(min(len1, len2)):
63+
diff = index[word1[j]] - index[word2[j]]
64+
if diff > 0:
65+
# 说明不是按字典序排序,直接返回False
66+
return False
67+
if diff < 0:
68+
# 说明当前两单词是按字典序排序,无需再往下进行循环比较
69+
flag = False
70+
break
71+
if flag and len1 > len2:
72+
return False
73+
return True
5674
```
5775

5876
### **Java**
5977

6078
<!-- 这里可写当前语言的特殊实现逻辑 -->
6179

6280
```java
63-
81+
class Solution {
82+
public boolean isAlienSorted(String[] words, String order) {
83+
int[] index = new int[26];
84+
for (int i = 0; i < 26; ++i) {
85+
index[order.charAt(i) - 'a'] = i;
86+
}
87+
for (int i = 0, m = words.length; i < m - 1; ++i) {
88+
String word1 = words[i];
89+
String word2 = words[i + 1];
90+
int len1 = word1.length();
91+
int len2 = word2.length();
92+
boolean flag = true;
93+
for (int j = 0, n = Math.min(len1, len2); j < n && flag; ++j) {
94+
int diff = index[word1.charAt(j) - 'a'] - index[word2.charAt(j) - 'a'];
95+
// 说明不是按字典序排序,直接返回False
96+
if (diff > 0) return false;
97+
// 说明当前两单词是按字典序排序,无需再往下进行循环比较
98+
if (diff < 0) flag = false;
99+
}
100+
if (flag && len1 > len2) return false;
101+
}
102+
return true;
103+
}
104+
}
64105
```
65106

66107
### **...**

‎solution/0900-0999/0953.Verifying an Alien Dictionary/README_EN.md

+39-2
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,50 @@
4949
### **Python3**
5050

5151
```python
52-
52+
class Solution:
53+
def isAlienSorted(self, words: List[str], order: str) -> bool:
54+
index = {v: k for k, v in enumerate(order)}
55+
for i in range(len(words) - 1):
56+
word1, word2 = words[i], words[i + 1]
57+
len1, len2 = len(word1), len(word2)
58+
flag = True
59+
for j in range(min(len1, len2)):
60+
diff = index[word1[j]] - index[word2[j]]
61+
if diff > 0:
62+
return False
63+
if diff < 0:
64+
flag = False
65+
break
66+
if flag and len1 > len2:
67+
return False
68+
return True
5369
```
5470

5571
### **Java**
5672

5773
```java
58-
74+
class Solution {
75+
public boolean isAlienSorted(String[] words, String order) {
76+
int[] index = new int[26];
77+
for (int i = 0; i < 26; ++i) {
78+
index[order.charAt(i) - 'a'] = i;
79+
}
80+
for (int i = 0, m = words.length; i < m - 1; ++i) {
81+
String word1 = words[i];
82+
String word2 = words[i + 1];
83+
int len1 = word1.length();
84+
int len2 = word2.length();
85+
boolean flag = true;
86+
for (int j = 0, n = Math.min(len1, len2); j < n && flag; ++j) {
87+
int diff = index[word1.charAt(j) - 'a'] - index[word2.charAt(j) - 'a'];
88+
if (diff > 0) return false;
89+
if (diff < 0) flag = false;
90+
}
91+
if (flag && len1 > len2) return false;
92+
}
93+
return true;
94+
}
95+
}
5996
```
6097

6198
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public boolean isAlienSorted(String[] words, String order) {
3+
int[] index = new int[26];
4+
for (int i = 0; i < 26; ++i) {
5+
index[order.charAt(i) - 'a'] = i;
6+
}
7+
for (int i = 0, m = words.length; i < m - 1; ++i) {
8+
String word1 = words[i];
9+
String word2 = words[i + 1];
10+
int len1 = word1.length();
11+
int len2 = word2.length();
12+
boolean flag = true;
13+
for (int j = 0, n = Math.min(len1, len2); j < n && flag; ++j) {
14+
int diff = index[word1.charAt(j) - 'a'] - index[word2.charAt(j) - 'a'];
15+
if (diff > 0) return false;
16+
if (diff < 0) flag = false;
17+
}
18+
if (flag && len1 > len2) return false;
19+
}
20+
return true;
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,17 @@
11
class Solution:
2-
def isAlienSorted(self, words, order):
3-
"""
4-
:type words: List[str]
5-
:type order: str
6-
:rtype: bool
7-
"""
8-
9-
order = {a: d for d, a in enumerate(order)}
10-
11-
for i in range(1, len(words)):
12-
j = 0
13-
while len(words[i - 1]) > j < len(words[i]):
14-
15-
value = order[words[i - 1][j]] - order[words[i][j]]
16-
17-
if value < 0:
18-
break
19-
elif value > 0 or (j + 1) == len(words[i]):
2+
def isAlienSorted(self, words: List[str], order: str) -> bool:
3+
index = {v: k for k, v in enumerate(order)}
4+
for i in range(len(words) - 1):
5+
word1, word2 = words[i], words[i + 1]
6+
len1, len2 = len(word1), len(word2)
7+
flag = True
8+
for j in range(min(len1, len2)):
9+
diff = index[word1[j]] - index[word2[j]]
10+
if diff > 0:
2011
return False
21-
22-
j += 1
23-
12+
if diff < 0:
13+
flag = False
14+
break
15+
if flag and len1 > len2:
16+
return False
2417
return True

0 commit comments

Comments
 (0)
Please sign in to comment.