Weighted Uniform Strings

Sort by

recency

|

802 Discussions

|

  • + 0 comments

    Pretty plain code. def weightedUniformStrings(s, queries): # Write your code here

    c2v = {
        'a': 1,
        'b': 2,
        'c': 3,
        'd': 4,
        'e': 5,
        'f': 6,
        'g': 7,
        'h': 8,
        'i': 9,
        'j': 10,
        'k': 11,
        'l': 12,
        'm': 13,
        'n': 14,
        'o': 15,
        'p': 16,
        'q': 17,
        'r': 18,
        's': 19,
        't': 20,
        'u': 21,
        'v': 22,
        'w': 23,
        'x': 24,
        'y': 25,
        'z': 26
    }
    
    collect = set()
    
    carry = []
    for si in s:
        if len(carry) == 0 or si != carry[-1]:
            carry = [si]
            collect.add(c2v[si])
        else:
            carry.append(si)
            collect.add(c2v[si]*len(carry))
    
    ans = []
    for q in queries:
        if q in collect:
            ans.append('Yes')
        else:
            ans.append('No')
    
    return ans
    
  • + 0 comments
    function weightedUniformStrings(s: string, queries: number[]): string[] {
        const alphabet = '0abcdefghijklmnopqrstuvwxyz'.split('');
        const availWeights =  new Set<number>()
        const chop = s.split('')
        let mult = 1
        for(let i = 0; i < chop.length; i++) {
            const weight = alphabet.indexOf(chop[i]) * mult;
            availWeights.add(weight);
            if(chop[i+1] !== chop[i]) {
                mult = 1
            } else {
                mult++
            }
        }
        const result: string[] = []
        for(let query of queries) {
            availWeights.has(query) ? result.push('Yes') : result.push('No')
        }
        return result
    }
    
  • + 0 comments
        public static List<String> weightedUniformStrings(String s, List<Integer> queries) {
        // Write your code here
        List<String> ans = new ArrayList<>();
        HashSet<Integer> weights = new HashSet<>();
        
        int currentweight = 0;
        char prevChar = ' ';
        
        for(int i = 0; i < s.length(); i++) {
            char currentChar = s.charAt(i);
            int charWeight = currentChar - 'a' + 1;
            
            if(currentChar == prevChar) {
                currentweight += charWeight;
            } else {
                currentweight = charWeight;
            }
            weights.add(currentweight);
            prevChar = currentChar;
        }
        
        for(int i : queries) {
                if(weights.contains(i)) {
                    ans.add("Yes");
                } else {
                ans.add("No");
                }
        }
            return ans;
        }
    
  • + 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