Welcome to Subscribe On Youtube

Formatted question description: https://leetcode.ca/all/1961.html

1961. Check If String Is a Prefix of Array

Level

Easy

Description

Given a string s and an array of strings words, determine whether s is a prefix string of words.

A string s is a prefix string of words if s can be made by concatenating the first k strings in words for some positive k no larger than words.length.

Return true if s is a prefix string of words, or false otherwise.

Example 1:

Input: s = “iloveleetcode”, words = [“i”,”love”,”leetcode”,”apples”]

Output: true

Explanation: s can be made by concatenating “i”, “love”, and “leetcode” together.

Example 2:

Input: s = “iloveleetcode”, words = [“apples”,”i”,”love”,”leetcode”]

Output: false

Explanation:

It is impossible to make s using a prefix of arr.

Constraints:

  • 1 <= words.length <= 100
  • 1 <= words[i].length <= 20
  • 1 <= s.length <= 1000
  • words[i] and s consist of only lowercase English letters.

Solution

Loop over s and words. If the characters do not match, return false. If s finishes but the last character of s is not the last character of any of the word in words, return false. If s finishes at the last character of any of the word in words, return true.

  • class Solution {
        public boolean isPrefixString(String s, String[] words) {
            int length = s.length();
            int arrLength = words.length;
            int index = 0;
            for (int i = 0; i < arrLength && index < length; i++) {
                String word = words[i];
                int wordLength = word.length();
                int j = 0;
                while (j < wordLength && index < length) {
                    if (s.charAt(index) == word.charAt(j)) {
                        index++;
                        j++;
                    } else
                        return false;
                }
                if (index == length && j < wordLength)
                    return false;
            }
            return index == length;
        }
    }
    
    ############
    
    class Solution {
        public boolean isPrefixString(String s, String[] words) {
            StringBuilder t = new StringBuilder();
            for (String w : words) {
                t.append(w);
                if (s.length() == t.length()) {
                    return s.equals(t.toString());
                }
            }
            return false;
        }
    }
    
  • class Solution:
        def isPrefixString(self, s: str, words: List[str]) -> bool:
            t = 0
            for i, w in enumerate(words):
                t += len(w)
                if len(s) == t:
                    return ''.join(words[: i + 1]) == s
            return False
    
    ############
    
    # 1961. Check If String Is a Prefix of Array
    # https://leetcode.com/problems/check-if-string-is-a-prefix-of-array/
    
    class Solution:
        def isPrefixString(self, s: str, words: List[str]) -> bool:
            ss = ""
            n = 0
            
            for word in words:
                n += len(word)
                ss += word
    
                if s[:n] != ss:
                    ss = ss[:n - len(word)]
                    return ss == s
                
            return ss == s
    
    
  • class Solution {
    public:
        bool isPrefixString(string s, vector<string>& words) {
            string t = "";
            for (string& w : words) {
                t += w;
                if (t.size() == s.size()) return t == s;
            }
            return false;
        }
    };
    
  • func isPrefixString(s string, words []string) bool {
    	t := ""
    	for _, w := range words {
    		t += w
    		if t == s {
    			return true
    		}
    	}
    	return false
    }
    
  • function isPrefixString(s: string, words: string[]): boolean {
        const t: string[] = [];
        const n = s.length;
        let m = 0;
        for (const w of words) {
            m += w.length;
            if (m > n) {
                return false;
            }
            t.push(w);
            if (m === n) {
                return s === t.join('');
            }
        }
        return false;
    }
    
    

All Problems

All Solutions