[プログラマー]コードテスト練習-練習問題3級最長のパリン症候群



Solution.java

class Solution
{
    public int solution(String s)
    {
        int answer = 0;

        for (int i = 0; i < s.length(); i++) {
            int left = i, right = s.length() - 1;
            int j = s.length();
            while (left <= right) {
                if (s.charAt(left) != s.charAt(right)) {
                    left = i;
                    j = right;
                }
                else {
                    left++;
                }
                right--;
            }
            
            if (j - i > answer) answer = j - i;
        }

        return answer;
    }
}
文字列の長さは最大2500なのでn^2です.
効率性はすべて合格したが,正確性では3つ間違えた.
原因が分からない.また挑戦しよう
例外がある.しかし、例外の解決にはタイムアウトが発生します.
文字列アルゴリズムを勉強した後、もう一度解きます.

Solution.JAva(修正)

class Solution
{
    public int solution(String s)
    {
        int answer = 0;

        for (int i = 0; s.length() - i > answer; i++) {
            for (int j = s.length(); j - i > answer; j--) {
                int left = i, right = j - 1;
                boolean b = true;
                while (left <= right) {
                    if (s.charAt(left) != s.charAt(right)) {
                        b = false;
                        break;
                    }
                    
                    left++;
                    right--;
                }
            
                if (b) answer = j - i;
            }
        }

        return answer;
    }
}
for文の終了条件を変更して解決しました.
出典:プログラマーコードテスト練習、https://programmers.co.kr/learn/challenges