Skip to content

Commit 24a7a6f

Browse files
committed
feat: add solutions to lc problem: No.1554. Strings Differ by One Character
1 parent fbc0988 commit 24a7a6f

File tree

6 files changed

+187
-4
lines changed

6 files changed

+187
-4
lines changed

solution/1500-1599/1554.Strings Differ by One Character/README.md

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,27 +47,93 @@
4747
<li><code>dict[i]</code>&nbsp;只包含小写英文字母。</li>
4848
</ul>
4949

50-
5150
## 解法
5251

5352
<!-- 这里可写通用的实现逻辑 -->
5453

54+
哈希表。
55+
56+
将字符串列表中每个字符串进行处理,比如 `"abcd"` 处理成 `"*bcd"``"a*cd"``"ab*d"``"abc*"` 模式串,依次存入哈希表中。存入之前先判断哈希表中是否已存在该模式串,若是,说明存在两个字符串在相同索引处只有一个字符不同,直接返回 true。否则遍历结束返回 false。
57+
5558
<!-- tabs:start -->
5659

5760
### **Python3**
5861

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

6164
```python
62-
65+
class Solution:
66+
def differByOne(self, dict: List[str]) -> bool:
67+
s = set()
68+
for word in dict:
69+
for i in range(len(word)):
70+
t = word[:i] + "*" + word[i + 1:]
71+
if t in s:
72+
return True
73+
s.add(t)
74+
return False
6375
```
6476

6577
### **Java**
6678

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

6981
```java
82+
class Solution {
83+
public boolean differByOne(String[] dict) {
84+
Set<String> s = new HashSet<>();
85+
for (String word : dict) {
86+
for (int i = 0; i < word.length(); ++i) {
87+
String t = word.substring(0, i) + "*" + word.substring(i + 1);
88+
if (s.contains(t)) {
89+
return true;
90+
}
91+
s.add(t);
92+
}
93+
}
94+
return false;
95+
}
96+
}
97+
```
98+
99+
### **C++**
100+
101+
```cpp
102+
class Solution {
103+
public:
104+
bool differByOne(vector<string>& dict) {
105+
unordered_set<string> s;
106+
for (auto word : dict)
107+
{
108+
for (int i = 0; i < word.size(); ++i)
109+
{
110+
auto t = word;
111+
t[i] = '*';
112+
if (s.count(t)) return true;
113+
s.insert(t);
114+
}
115+
}
116+
return false;
117+
}
118+
};
119+
```
70120
121+
### **Go**
122+
123+
```go
124+
func differByOne(dict []string) bool {
125+
s := make(map[string]bool)
126+
for _, word := range dict {
127+
for i := range word {
128+
t := word[:i] + "*" + word[i+1:]
129+
if s[t] {
130+
return true
131+
}
132+
s[t] = true
133+
}
134+
}
135+
return false
136+
}
71137
```
72138

73139
### **...**

solution/1500-1599/1554.Strings Differ by One Character/README_EN.md

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,21 +43,83 @@
4343
<li><code>dict[i]</code> contains only lowercase English letters.</li>
4444
</ul>
4545

46-
4746
## Solutions
4847

4948
<!-- tabs:start -->
5049

5150
### **Python3**
5251

5352
```python
54-
53+
class Solution:
54+
def differByOne(self, dict: List[str]) -> bool:
55+
s = set()
56+
for word in dict:
57+
for i in range(len(word)):
58+
t = word[:i] + "*" + word[i + 1:]
59+
if t in s:
60+
return True
61+
s.add(t)
62+
return False
5563
```
5664

5765
### **Java**
5866

5967
```java
68+
class Solution {
69+
public boolean differByOne(String[] dict) {
70+
Set<String> s = new HashSet<>();
71+
for (String word : dict) {
72+
for (int i = 0; i < word.length(); ++i) {
73+
String t = word.substring(0, i) + "*" + word.substring(i + 1);
74+
if (s.contains(t)) {
75+
return true;
76+
}
77+
s.add(t);
78+
}
79+
}
80+
return false;
81+
}
82+
}
83+
```
84+
85+
### **C++**
86+
87+
```cpp
88+
class Solution {
89+
public:
90+
bool differByOne(vector<string>& dict) {
91+
unordered_set<string> s;
92+
for (auto word : dict)
93+
{
94+
for (int i = 0; i < word.size(); ++i)
95+
{
96+
auto t = word;
97+
t[i] = '*';
98+
if (s.count(t)) return true;
99+
s.insert(t);
100+
}
101+
}
102+
return false;
103+
}
104+
};
105+
```
60106
107+
### **Go**
108+
109+
```go
110+
func differByOne(dict []string) bool {
111+
s := make(map[string]bool)
112+
for _, word := range dict {
113+
for i := range word {
114+
t := word[:i] + "*" + word[i+1:]
115+
if s[t] {
116+
return true
117+
}
118+
s[t] = true
119+
}
120+
}
121+
return false
122+
}
61123
```
62124

63125
### **...**
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public:
3+
bool differByOne(vector<string>& dict) {
4+
unordered_set<string> s;
5+
for (auto word : dict)
6+
{
7+
for (int i = 0; i < word.size(); ++i)
8+
{
9+
auto t = word;
10+
t[i] = '*';
11+
if (s.count(t)) return true;
12+
s.insert(t);
13+
}
14+
}
15+
return false;
16+
}
17+
};
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
func differByOne(dict []string) bool {
2+
s := make(map[string]bool)
3+
for _, word := range dict {
4+
for i := range word {
5+
t := word[:i] + "*" + word[i+1:]
6+
if s[t] {
7+
return true
8+
}
9+
s[t] = true
10+
}
11+
}
12+
return false
13+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public boolean differByOne(String[] dict) {
3+
Set<String> s = new HashSet<>();
4+
for (String word : dict) {
5+
for (int i = 0; i < word.length(); ++i) {
6+
String t = word.substring(0, i) + "*" + word.substring(i + 1);
7+
if (s.contains(t)) {
8+
return true;
9+
}
10+
s.add(t);
11+
}
12+
}
13+
return false;
14+
}
15+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def differByOne(self, dict: List[str]) -> bool:
3+
s = set()
4+
for word in dict:
5+
for i in range(len(word)):
6+
t = word[:i] + "*" + word[i + 1:]
7+
if t in s:
8+
return True
9+
s.add(t)
10+
return False

0 commit comments

Comments
 (0)