Sherlock and the Valid String

Sherlock considers a string to be valid if all characters of the string appear the same number of times. It is also valid if he can remove just the character at 1 index in the string, and the remaining characters will occur the same number of times. Given a string s, determine if it is valid. If so, return YES, otherwise, return NO.

Example:

Input:  s = "abcdefghhgfedecba"
Output: YES

Approach

Java

import java.util.HashMap;

public class ValidString {
    public static void main(String[] args) {

        String s = "abcdefghhgfedecba";
        System.out.println(isValid(s));

    }

    static String isValid(String s) {
        HashMap<CharacterIntegermp = 
new HashMap<CharacterInteger>();
        HashMap<IntegerIntegerfreq = 
new HashMap<IntegerInteger>();

        // count the frequency of each characters
        for (int i = 0; i < s.length(); i++)
            mp.put(s.charAt(i), mp.getOrDefault(s.charAt(i),
 0) + 1);

        for (HashMap.Entry<CharacterIntegerentry : 
mp.entrySet())
            freq.put(entry.getValue(), 
freq.getOrDefault(entry.getValue(), 0) + 1);

        int bal = 0, maxf = 0;

        for (HashMap.Entry<IntegerIntegerentry : 
freq.entrySet()) {

            if (entry.getValue() > maxf) {
                maxf = entry.getValue();
                bal = entry.getKey();
            }

        }

        int count = 0, del = 0;

        for (HashMap.Entry<CharacterIntegerentry :
 mp.entrySet()) {

            if (entry.getValue() == 1 ||
 entry.getValue() == bal - 1 || 
entry.getValue() == bal + 1) {
                del++;
            } else if (Math.abs(entry.getValue() - bal) > 0)
                count++;

        }

        if (del <= 1 && count == 0)
            return "YES";
        else
            return "NO";
    }

}


C++

#include <bits/stdc++.h>
using namespace std;

string isValid(string s)
{
    map<charintmp;
    map<intintfreq;

    //count the frequency of each characters
    for (char c : s)
        mp[c]++;

    for (auto it = mp.begin(); it != mp.end(); it++)
        freq[it->second]++;
    int bal = 0maxf = 0;
    for (auto it = freq.begin(); it != freq.end(); ++it)
    {
        if (it->second > maxf)
        {
            maxf = it->second;
            bal = it->first;
        }
    }
    int count = 0del = 0;
    for (auto it = mp.begin(); it != mp.end(); it++)
    {
        if (it->second == 1 || it->second == bal - 1 || 
it->second == bal + 1)
            del++;
        else if (abs(it->second - bal) > 0)
            count++;
    }
    if (del <= 1 && count == 0)
        return "YES";
    else
        return "NO";
}

int main()
{

    string s = "abcdefghhgfedecba";
    cout << isValid(s<< "\n";

    return 0;
}


No comments:

Post a Comment