ในปัญหานี้ เราได้รับ string งานคือหา คำ (word) แรกที่มีความยาวมากที่สุดและเป็นเลขคู่
ตัวอย่าง
Input: "learn programming at TutorialsPoint" Output: TutorialsPoint
TutorialsPoint = 14 ตัวอักษร (คู่) และยาวที่สุด
วิธีการแก้ปัญหา: Single Pass O(N)
- Traverse string ตัวอักษรทีละตัว
- นับความยาวคำปัจจุบัน (currLen)
- เวลาเจอ space: ถ้า currLen เป็นเลขคู่และ > maxLen → อัปเดต maxLen และ start index
- Reset currLen = 0
- เช็คคำสุดท้ายหลังจบ loop
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
string findMaxEvenLenWord(string str) {
int maxLen = 0, currLen = 0, startIdx = -1;
int n = str.length();
for (int i = 0; i <= n; i++) {
if (i == n || str[i] == ' ') {
if (currLen % 2 == 0 && currLen > maxLen) {
maxLen = currLen;
startIdx = i - currLen;
}
currLen = 0;
} else currLen++;
}
return (startIdx == -1) ? "Not Found!" : str.substr(startIdx, maxLen);
}
int main() {
cout << findMaxEvenLenWord("Learn programming at Tutorialspoint");
// Tutorialspoint
return 0;
}
ผลลัพธ์
Tutorialspoint