// https://leetcode.com/problems/count-symmetric-integers
// T: O(N)
// S: O(1)

public class CountSymmetricIntegers {
    public int countSymmetricIntegers(int low, int high) {
        int count = 0;
        for (int start = low ; start <= high ; start++) {
            final String number = start + "";
            if (isSymmetric(number)) {
                count++;
            }
        }
        return count;
    }

    private static boolean isSymmetric(String number) {
        if (number.length() % 2 != 0) {
            return false;
        }
        final String firstHalf = number.substring(0, number.length() / 2);
        final String secondHalf = number.substring(number.length() / 2);
        return sumOfDigits(firstHalf) == sumOfDigits(secondHalf);
    }

    private static int sumOfDigits(final String number) {
        int sum = 0;
        for (int i = 0 ; i < number.length() ; i++) {
            sum += number.charAt(i) - '0';
        }
        return sum;
    }
}