- start, end indexμ μ‘°ν©μ λͺ¨λ μλνμ¬ palindromeμ μ°Ύμλ³΄λ €κ³ νμΌλ μ€ν¨ν¨.
- κ°λ³ indexλ₯Ό κΈ°μ€μΌλ‘ μ μμΌλ‘ κΈμλ₯Ό νμ₯νλ©΄μ palindromeμ΄ κ΅¬μ±κ°λ₯νμ§ μμλ³Έλ€.
- λ¨, νμ₯ν λ κΈΈμ΄κ° νμ, μ§μμΈ κ²½μ°λ₯Ό λͺ¨λ κ³ λ €ν΄μΌ νλ€.
- νμμΈ κ²½μ°λ νμ¬ indexλ₯Ό κΈ°μ€μΌλ‘ μμμΌλ‘ 1κ°μ© νμ₯νλ©° κ°μμ§ λΉκ΅νλ€.
- μ§μμΈ κ²½μ°λ νμ¬ indexμ λ°λ‘ κ·Έ λ€μ indexκ° κ°μμ§ λΉκ΅νκ³ κ·Έ λ€μλΆν° μμμΌλ‘ 1κ°μ© νμ₯νλ©° κ°μμ§ λΉκ΅νλ€.
class Solution {
public:
pair<int, int> expand(string& s, int start, int end) {
while (start >= 0 && end < s.length() && s[start] == s[end]) {
--start;
++end;
}
return {start + 1, end - 1};
}
string longestPalindrome(string s) {
pair<int, int> result = {0, 0};
for (int i = 0; i < s.length(); ++i) {
// odd length
auto cur = expand(s, i, i);
if (cur.second - cur.first > result.second - result.first)
result = cur;
// even length
if (i == s.length() - 1 || s[i] != s[i + 1]) continue;
cur = expand(s, i, i + 1);
if (cur.second - cur.first > result.second - result.first)
result = cur;
}
return s.substr(
result.first,
result.second - result.first + 1);
}
};