Skip to content

Commit 941be85

Browse files
committed
feat: add solutions to lc problem: No.0249
No.0249.Group Shifted Strings
1 parent 247fc31 commit 941be85

File tree

6 files changed

+233
-2
lines changed

6 files changed

+233
-2
lines changed

solution/0200-0299/0249.Group Shifted Strings/README.md

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,103 @@
3030

3131
<!-- 这里可写通用的实现逻辑 -->
3232

33+
将每个字符串第一个字母变成 'a'。
34+
3335
<!-- tabs:start -->
3436

3537
### **Python3**
3638

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

3941
```python
40-
42+
class Solution:
43+
def groupStrings(self, strings: List[str]) -> List[List[str]]:
44+
mp = defaultdict(list)
45+
for s in strings:
46+
t = []
47+
diff = ord(s[0]) - ord('a')
48+
for c in s:
49+
d = ord(c) - diff
50+
if d < ord('a'):
51+
d += 26
52+
t.append(chr(d))
53+
k = ''.join(t)
54+
mp[k].append(s)
55+
return list(mp.values())
4156
```
4257

4358
### **Java**
4459

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

4762
```java
63+
class Solution {
64+
public List<List<String>> groupStrings(String[] strings) {
65+
Map<String, List<String>> mp = new HashMap<>();
66+
for (String s : strings) {
67+
int diff = s.charAt(0) - 'a';
68+
char[] t = s.toCharArray();
69+
for (int i = 0; i < t.length; ++i) {
70+
char d = (char) (t[i] - diff);
71+
if (d < 'a') {
72+
d += 26;
73+
}
74+
t[i] = d;
75+
}
76+
String key = new String(t);
77+
mp.computeIfAbsent(key, k -> new ArrayList<>()).add(s);
78+
}
79+
return new ArrayList<>(mp.values());
80+
}
81+
}
82+
```
83+
84+
### **C++**
85+
86+
```cpp
87+
class Solution {
88+
public:
89+
vector<vector<string>> groupStrings(vector<string>& strings) {
90+
unordered_map<string, vector<string>> mp;
91+
for (auto& s : strings)
92+
{
93+
int diff = s[0] - 'a';
94+
string t = s;
95+
for (int i = 0; i < t.size(); ++i)
96+
{
97+
char d = t[i] - diff;
98+
if (d < 'a') d += 26;
99+
t[i] = d;
100+
}
101+
cout << t << endl;
102+
mp[t].push_back(s);
103+
}
104+
vector<vector<string>> ans;
105+
for (auto& e : mp)
106+
ans.push_back(e.second);
107+
return ans;
108+
}
109+
};
110+
```
48111
112+
### **Go**
113+
114+
```go
115+
func groupStrings(strings []string) [][]string {
116+
mp := make(map[string][]string)
117+
for _, s := range strings {
118+
k := ""
119+
for i := range s {
120+
k += string((s[i]-s[0]+26)%26 + 'a')
121+
}
122+
mp[k] = append(mp[k], s)
123+
}
124+
var ans [][]string
125+
for _, v := range mp {
126+
ans = append(ans, v)
127+
}
128+
return ans
129+
}
49130
```
50131

51132
### **...**

solution/0200-0299/0249.Group Shifted Strings/README_EN.md

Lines changed: 80 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,92 @@
4242
### **Python3**
4343

4444
```python
45-
45+
class Solution:
46+
def groupStrings(self, strings: List[str]) -> List[List[str]]:
47+
mp = defaultdict(list)
48+
for s in strings:
49+
t = []
50+
diff = ord(s[0]) - ord('a')
51+
for c in s:
52+
d = ord(c) - diff
53+
if d < ord('a'):
54+
d += 26
55+
t.append(chr(d))
56+
k = ''.join(t)
57+
mp[k].append(s)
58+
return list(mp.values())
4659
```
4760

4861
### **Java**
4962

5063
```java
64+
class Solution {
65+
public List<List<String>> groupStrings(String[] strings) {
66+
Map<String, List<String>> mp = new HashMap<>();
67+
for (String s : strings) {
68+
int diff = s.charAt(0) - 'a';
69+
char[] t = s.toCharArray();
70+
for (int i = 0; i < t.length; ++i) {
71+
char d = (char) (t[i] - diff);
72+
if (d < 'a') {
73+
d += 26;
74+
}
75+
t[i] = d;
76+
}
77+
String key = new String(t);
78+
mp.computeIfAbsent(key, k -> new ArrayList<>()).add(s);
79+
}
80+
return new ArrayList<>(mp.values());
81+
}
82+
}
83+
```
84+
85+
### **C++**
86+
87+
```cpp
88+
class Solution {
89+
public:
90+
vector<vector<string>> groupStrings(vector<string>& strings) {
91+
unordered_map<string, vector<string>> mp;
92+
for (auto& s : strings)
93+
{
94+
int diff = s[0] - 'a';
95+
string t = s;
96+
for (int i = 0; i < t.size(); ++i)
97+
{
98+
char d = t[i] - diff;
99+
if (d < 'a') d += 26;
100+
t[i] = d;
101+
}
102+
cout << t << endl;
103+
mp[t].push_back(s);
104+
}
105+
vector<vector<string>> ans;
106+
for (auto& e : mp)
107+
ans.push_back(e.second);
108+
return ans;
109+
}
110+
};
111+
```
51112
113+
### **Go**
114+
115+
```go
116+
func groupStrings(strings []string) [][]string {
117+
mp := make(map[string][]string)
118+
for _, s := range strings {
119+
k := ""
120+
for i := range s {
121+
k += string((s[i]-s[0]+26)%26 + 'a')
122+
}
123+
mp[k] = append(mp[k], s)
124+
}
125+
var ans [][]string
126+
for _, v := range mp {
127+
ans = append(ans, v)
128+
}
129+
return ans
130+
}
52131
```
53132

54133
### **...**
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
public:
3+
vector<vector<string>> groupStrings(vector<string>& strings) {
4+
unordered_map<string, vector<string>> mp;
5+
for (auto& s : strings)
6+
{
7+
int diff = s[0] - 'a';
8+
string t = s;
9+
for (int i = 0; i < t.size(); ++i)
10+
{
11+
char d = t[i] - diff;
12+
if (d < 'a') d += 26;
13+
t[i] = d;
14+
}
15+
cout << t << endl;
16+
mp[t].push_back(s);
17+
}
18+
vector<vector<string>> ans;
19+
for (auto& e : mp)
20+
ans.push_back(e.second);
21+
return ans;
22+
}
23+
};
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
func groupStrings(strings []string) [][]string {
2+
mp := make(map[string][]string)
3+
for _, s := range strings {
4+
k := ""
5+
for i := range s {
6+
k += string((s[i]-s[0]+26)%26 + 'a')
7+
}
8+
mp[k] = append(mp[k], s)
9+
}
10+
var ans [][]string
11+
for _, v := range mp {
12+
ans = append(ans, v)
13+
}
14+
return ans
15+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public List<List<String>> groupStrings(String[] strings) {
3+
Map<String, List<String>> mp = new HashMap<>();
4+
for (String s : strings) {
5+
int diff = s.charAt(0) - 'a';
6+
char[] t = s.toCharArray();
7+
for (int i = 0; i < t.length; ++i) {
8+
char d = (char) (t[i] - diff);
9+
if (d < 'a') {
10+
d += 26;
11+
}
12+
t[i] = d;
13+
}
14+
String key = new String(t);
15+
mp.computeIfAbsent(key, k -> new ArrayList<>()).add(s);
16+
}
17+
return new ArrayList<>(mp.values());
18+
}
19+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution:
2+
def groupStrings(self, strings: List[str]) -> List[List[str]]:
3+
mp = defaultdict(list)
4+
for s in strings:
5+
t = []
6+
diff = ord(s[0]) - ord('a')
7+
for c in s:
8+
d = ord(c) - diff
9+
if d < ord('a'):
10+
d += 26
11+
t.append(chr(d))
12+
k = ''.join(t)
13+
mp[k].append(s)
14+
return list(mp.values())

0 commit comments

Comments
 (0)