File tree Expand file tree Collapse file tree 6 files changed +187
-4
lines changed
solution/1500-1599/1554.Strings Differ by One Character Expand file tree Collapse file tree 6 files changed +187
-4
lines changed Original file line number Diff line number Diff line change 47
47
<li><code>dict[i]</code> 只包含小写英文字母。</li>
48
48
</ul >
49
49
50
-
51
50
## 解法
52
51
53
52
<!-- 这里可写通用的实现逻辑 -->
54
53
54
+ 哈希表。
55
+
56
+ 将字符串列表中每个字符串进行处理,比如 ` "abcd" ` 处理成 ` "*bcd" ` 、` "a*cd" ` 、` "ab*d" ` 、` "abc*" ` 模式串,依次存入哈希表中。存入之前先判断哈希表中是否已存在该模式串,若是,说明存在两个字符串在相同索引处只有一个字符不同,直接返回 true。否则遍历结束返回 false。
57
+
55
58
<!-- tabs:start -->
56
59
57
60
### ** Python3**
58
61
59
62
<!-- 这里可写当前语言的特殊实现逻辑 -->
60
63
61
64
``` 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
63
75
```
64
76
65
77
### ** Java**
66
78
67
79
<!-- 这里可写当前语言的特殊实现逻辑 -->
68
80
69
81
``` 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
+ ```
70
120
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
+ }
71
137
```
72
138
73
139
### ** ...**
Original file line number Diff line number Diff line change 43
43
<li><code>dict[i]</code> contains only lowercase English letters.</li>
44
44
</ul >
45
45
46
-
47
46
## Solutions
48
47
49
48
<!-- tabs:start -->
50
49
51
50
### ** Python3**
52
51
53
52
``` 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
55
63
```
56
64
57
65
### ** Java**
58
66
59
67
``` 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
+ ```
60
106
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
+ }
61
123
```
62
124
63
125
### ** ...**
Original file line number Diff line number Diff line change
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
+ };
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
You can’t perform that action at this time.
0 commit comments