Weighted Uniform Strings

Sort by

recency

|

799 Discussions

|

  • + 0 comments

    Here is a solution in python with O(n + m) time and O(m) space.

    The space is in part because althogh the set cat grow as large as 26, values can be access at O(1) and the queries are the values that we search for in the set at a time of O(m) and equel space.

    def weightedUniformStrings(s, queries):
        res = []
        q_set = set([])
        weight = 0
        
        for i in range(len(s)): # O(n)
            if i == 0 or s[i] != s[i - 1]:
                weight = ord(s[i]) - ord('a') + 1
            else:
                weight += ord(s[i]) - ord('a') + 1
            
            q_set.add(weight) # O(n)
    
        for val in queries: # O(m)
            if val in q_set:
                res.append("Yes")
            else:
                res.append("No")
                
        return res
    
  • + 0 comments
    def weightedUniformStrings(s, queries):
        # Write your code here
        
        n = set()
        c = 0
        repeat_multiplier = 1
        while c < len(s):
            if c > 0 and s[c - 1] == s[c]:
                repeat_multiplier += 1
            else:
                repeat_multiplier = 1
            weight = (ord(s[c]) - 96) * repeat_multiplier
            n.add(weight)
            c += 1
        result = []
        for i in queries:
            if i in n:
                result.append("Yes")
            else:
                result.append("No")
        return result
    
  • + 0 comments

    Here is problem solution in python java c++ c and javascript - https://programmingoneonone.com/hackerrank-weighted-uniform-strings-problem-solution.html

  • + 0 comments

    Python Tip rather than a solution: - A data type 'set' is faster to find a value than a data type 'list'. - It is because 'set' follows hash-based search O(1) and 'list' follows the linear search O(n).

  • + 0 comments

    My C++ Solution:

    vector<string> weightedUniformStrings(string s, vector<int> queries) {
        unordered_map<long,int> mp;
        vector<string> result;
        
        for(int i=0; i<s.size(); ){
            int weight = (s[i]-'a')+1;
            
            if(mp.find(weight) == mp.end()){
                mp[weight]++;
            }
            int count = 1;
            int j = i+1;
            while(s[i]==s[j]&& j<s.size()){
                weight = (s[i]-'a'+1)*(++count);
                if(!mp[weight])mp[weight]++;
                j++;
            }
            i =j;
        }
        for(auto item : queries){
            if(mp.find(item) != mp.end()){
                result.push_back("Yes");
            }else{
                result.push_back("No");
            }
        }
        return result;
    }