Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 74411c8

Browse files
committed
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‎

Lines changed: 43 additions & 2 deletions
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‎

Lines changed: 39 additions & 2 deletions
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
### **...**
Lines changed: 22 additions & 0 deletions
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+
}
Lines changed: 14 additions & 21 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /