«PAYPALISHIRING» matni berilgan qatorlar soni bo’yicha zigzag ko’rinishida yozilgan. Uni qatorma-qator o’qib olish va qatorlar soni 3 bo’lganda «PAHNAPLSIIGYIR» ko’rinishida chiqarish kerak.
P A H N A P L S I I G Y I R
Yoziladigan funksiya quyidagicha:
string convert(string s, int numRows);
Ishlash tartibi
Albatta intuitiv usul – bu matnni ikki o’lchamli massivga zigzag ko’rinishida to’ldirib chiqish bo’ladi. Lekin bunday holatda ishlash vaqti O(n2 + n) ko’rinishiga keladi, sababi massivni to’ldirish O(n2) keyin undan string yasash kerak.
Yana bir – O(n) bilan bitadigan usuli ham bor. Biz uni ko’rib chiqamiz.
- Matn uzunligiga qadar ishlaydigan for siklini ochamiz.
- sikl qadami bo’yicha qator qadamini topamiz. U 0 va numRows orasida bo’lishi mumkin.
- Qatorlarni matn harflari bilan to’ldirib boramiz.
for (let i = 0; i < str.length; i++) {
// Pozitsiya 0 va numRows oralig'idagi son.
// U 0, 1, 2, ..., numRows, 0, 1, 2, ..., numRows ko'rinishida o'zgarib boradi.
const pos = i % (2 * numRows - 2);
// Qator raqamini topish
const j = pos < numRows ? pos : 2 * numRows - 2 - pos;
// Harflarni qator bo'yicha yig'ib boramiz.
strNew[j] = strNew[j] ? strNew[j] + str[i] : str[i];
}
Natijada bizda bir o’lchamli strNew massivi hosil bo’ladi. Uni stringga o’tkazib, qaytaramiz.