สมมติว่าเรามีสตริง เราสามารถ "เปลี่ยน" ตัวอักษรแต่ละตัวเป็นตัวอักษรต่อเนื่องกันได้ ดังนั้น:"abc" สามารถเปลี่ยนเป็น "bcd" ได้ เราสามารถดำเนินการนี้ต่อไปได้ซึ่งสร้างลำดับ:"abc" -> "bcd" -> ... -> "xyz" หากเรามีรายการสตริงที่ไม่ว่างที่มีเฉพาะตัวอักษรพิมพ์เล็ก เราต้องจัดกลุ่มสตริงทั้งหมดที่อยู่ในลำดับการขยับเดียวกัน
ดังนั้น หากอินพุตเป็น ["abc", "bcd", "acef", "xyz", "az", "ba", "a", "z"] ผลลัพธ์จะเป็น [ ["abc ","bcd","xyz"], ["az","ba"], ["acef"], ["a","z"] ]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดหนึ่งแผนที่ m
-
กำหนดอาร์เรย์ 2D ret หนึ่งรายการ
-
สำหรับการเริ่มต้น i :=0, เมื่อ i <ขนาดของสตริง, อัปเดต (เพิ่ม i ขึ้น 1), ทำ -
-
คีย์ :=สตริงว่าง
-
สำหรับการเริ่มต้น j :=1 เมื่อ j
-
diff :=strings[i, j] - strings[i, j - 1]
-
ถ้าต่าง <0 แล้ว −
-
ต่าง :=ต่าง + 26
-
-
key :=key concatenate "#" concatenate diff เป็นสตริง
-
-
ใส่ strings[i] ต่อท้าย m[key]
-
-
สำหรับแต่ละองค์ประกอบในหน่วย m ให้ทำ -
-
แทรกค่าของมันที่ส่วนท้ายของ ret
-
(เพิ่มขึ้นอีก 1)
-
-
รีเทิร์น
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<auto< > v){
cout << "[";
for(int i = 0; i<v.size(); i++){
cout << "[";
for(int j = 0; j <v[i].size(); j++){
cout << v[i][j] << ", ";
}
cout << "],";
}
cout << "]"<<endl;
}
class Solution {
public:
vector<vector<string>> groupStrings(vector<string<& strings) {
unordered_map<string, vector<string> > m;
vector<vector<string< > ret;
for (int i = 0; i < strings.size(); i++) {
string key = "";
for (int j = 1; j < strings[i].size(); j++) {
int diff = strings[i][j] - strings[i][j - 1];
if (diff < 0)
diff += 26;
key += "#" + to_string(diff);
}
m[key].push_back(strings[i]);
}
unordered_map<string, vector<string< >::iterator it = m.begin();
while (it != m.end()) {
ret.push_back(it->second);
it++;
}
return ret;
}
};
main(){
Solution ob;
vector<string< v = {"abc","bcd","acef","xyz","az","ba","a","z"};
print_vector(ob.groupStrings(v));
} อินพุต
{"abc","bcd","acef","xyz","az","ba","a","z"} ผลลัพธ์
[[az, ba, ],[a, z, ],[abc, bcd, xyz, ],[acef, ],]