Sherlock and the Valid String

  • + 0 comments

    Java Solution

        public static String isValid(String s) {
            Map<String, Integer> cntMap = new HashMap<>();
            int maxCnt = 0;
            int maxVal = 0; 
            int minVal = Integer.MAX_VALUE;
            
            // Set maxVal and cntMap
            for (int i = 0; i < s.length(); i++) {
                String key = s.substring(i, i + 1);
                int val = cntMap.compute(key, (k,v) -> v == null ? 1 : v + 1);
                if (val > maxVal) maxVal = val;
            }
            
            // Set minVal and maxCnt
            for (int value : cntMap.values()) {
                if (value == maxVal) maxCnt++;
                if (value < minVal) minVal = value;
            }
            
            boolean valid = maxVal == minVal
                || minVal == 1 && maxCnt == cntMap.size() - 1
                || maxVal - minVal == 1 && maxCnt == 1;
            return valid ? "YES" : "NO";
        }