Welcome to Subscribe On Youtube

1554. Strings Differ by One Character

Description

Given a list of strings dict where all the strings are of the same length.

Return true if there are 2 strings that only differ by 1 character in the same index, otherwise return false.

 

Example 1:

Input: dict = ["abcd","acbd", "aacd"]
Output: true
Explanation: Strings "abcd" and "aacd" differ only by one character in the index 1.

Example 2:

Input: dict = ["ab","cd","yz"]
Output: false

Example 3:

Input: dict = ["abcd","cccc","abyd","abab"]
Output: true

 

Constraints:

  • The number of characters in dict <= 105
  • dict[i].length == dict[j].length
  • dict[i] should be unique.
  • dict[i] contains only lowercase English letters.

 

Follow up: Could you solve this problem in O(n * m) where n is the length of dict and m is the length of each string.

Solutions

  • class Solution {
        public boolean differByOne(String[] dict) {
            Set<String> s = new HashSet<>();
            for (String word : dict) {
                for (int i = 0; i < word.length(); ++i) {
                    String t = word.substring(0, i) + "*" + word.substring(i + 1);
                    if (s.contains(t)) {
                        return true;
                    }
                    s.add(t);
                }
            }
            return false;
        }
    }
    
  • class Solution {
    public:
        bool differByOne(vector<string>& dict) {
            unordered_set<string> s;
            for (auto word : dict) {
                for (int i = 0; i < word.size(); ++i) {
                    auto t = word;
                    t[i] = '*';
                    if (s.count(t)) return true;
                    s.insert(t);
                }
            }
            return false;
        }
    };
    
  • class Solution:
        def differByOne(self, dict: List[str]) -> bool:
            s = set()
            for word in dict:
                for i in range(len(word)):
                    t = word[:i] + "*" + word[i + 1 :]
                    if t in s:
                        return True
                    s.add(t)
            return False
    
    
  • func differByOne(dict []string) bool {
    	s := make(map[string]bool)
    	for _, word := range dict {
    		for i := range word {
    			t := word[:i] + "*" + word[i+1:]
    			if s[t] {
    				return true
    			}
    			s[t] = true
    		}
    	}
    	return false
    }
    

All Problems

All Solutions