สมมติว่าเรามีสตริง เราสามารถ "เปลี่ยน" ตัวอักษรแต่ละตัวเป็นตัวอักษรต่อเนื่องกันได้ ดังนั้น:"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, ],]