返回介绍

solution / 1500-1599 / 1554.Strings Differ by One Character / README

发布于 2024-06-17 01:03:18 字数 2840 浏览 0 评论 0 收藏 0

1554. 只有一个不同字符的字符串

English Version

题目描述

给定一个字符串列表 dict ,其中所有字符串的长度都相同。

当存在两个字符串在相同索引处只有一个字符不同时,返回 True ,否则返回 False

 

示例 1:

输入:dict = ["abcd","acbd", "aacd"]
输出:true
解释:字符串 "abcd" 和 "aacd" 只在索引 1 处有一个不同的字符。

示例 2:

输入:dict = ["ab","cd","yz"]
输出:false

示例 3:

输入:dict = ["abcd","cccc","abyd","abab"]
输出:true

 

提示:

  • dict 中的字符数小于或等于 10^5 。
  • dict[i].length == dict[j].length
  • dict[i] 是互不相同的。
  • dict[i] 只包含小写英文字母。

 

进阶:你可以以 O(n*m) 的复杂度解决问题吗?其中 n 是列表 dict 的长度,m 是字符串的长度。

解法

方法一

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
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;
  }
};
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
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文