【每日一题Day217】LC2451差值数组不同的字符串 | 枚举+变量记录

这篇具有很好参考价值的文章主要介绍了【每日一题Day217】LC2451差值数组不同的字符串 | 枚举+变量记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

差值数组不同的字符串【LC2451】

给你一个字符串数组 words ,每一个字符串长度都相同,令所有字符串的长度都为 n

每个字符串 words[i] 可以被转化为一个长度为 n - 1差值整数数组 difference[i] ,其中对于 0 <= j <= n - 2difference[i][j] = words[i][j+1] - words[i][j] 。注意两个字母的差值定义为它们在字母表中 位置 之差,也就是说 'a' 的位置是 0'b' 的位置是 1'z' 的位置是 25

  • 比方说,字符串 "acb" 的差值整数数组是 [2 - 0, 1 - 2] = [2, -1]

words 中所有字符串 除了一个字符串以外 ,其他字符串的差值整数数组都相同。你需要找到那个不同的字符串。

请你返回 words差值整数数组 不同的字符串。

纵向比较实现1

  • 思路

    由于words 中所有字符串 除了一个字符串以外 ,其他字符串的差值整数数组都相同。因此我们可以求出第一个字符串的差值数组,并记录该差值数组出现的次数count。然后枚举其他字符串,比较差值数组是否相同,分情况讨论。

    • 如果差值数组不同,并且count>1,那么此时的字符串即为答案。
    • 但是,还存在一种情况,第一个字符串为答案,那么最终count一直为1。
  • 实现文章来源地址https://www.toymoban.com/news/detail-466221.html

    class Solution {
        public String oddString(String[] words) {
            // 先记录第一个字符串的差值数组,并记录该差值数组出现的次数count
            // 再记录与它不同的差值数组的下标diff
            // 最后如果count>1,那么返回diff,否则返回0
            int n = words[0].length();
            int[] array = new int[n - 1];
            int count = 1, index = -1;
            for (int i = 0; i < n - 1; i++){
                array[i] = words[0].charAt(i + 1) - words[0].charAt(i);
            }
            for (int j = 1; j < words.length; j++){
                boolean same = true;
                for (int i = 0; i < n - 1; i++){
                    if (words[j].charAt(i + 1) - words[j].charAt(i) != array[i]){
                        same = false;
                        index = j;
                        break;
                    }
                }
                if (same) count++;
                if (count > 1 && index != -1) return words[index];
            }
            return words[0];
        }
    }
    
    • 复杂度
      • 时间复杂度: O ( m ∗ n ) \mathcal{O}(m*n) O(mn),n为字符串长度,m为字符串个数
      • 空间复杂度: O ( n ) \mathcal{O}(n) O(n)

纵向比较实现2

  • 思路:

    也是先记录第一个字符串的差值数组,然后找到与它不同的字符串,那么答案幸福二选一。再选择另一个字符串与第一个字符串的差值数组进行比较,如果不同,答案为第一个字符串,反之为另一个字符串

  • 实现

    class Solution {
        public String oddString(String[] words) {
            int n = words.length;
            int i = 1;
            for(i = 1; i < n; i++){
                if(!check(words[i], words[0])){
                    break;
                }
            }
            
            for(int j = 1; j < n; j++){
                if(j != i){
                    if(check(words[j], words[0])){
                        return words[i];
                    }
                    else{
                        return words[0];
                    }
                }
            }
            return "";
        }
    
        private boolean check(String s1, String s2){
            int n = s1.length();
            int m = s1.charAt(0) - s2.charAt(0);
            for(int i = 1; i < n; i++){
                if(s1.charAt(i) - s2.charAt(i) != m){
                    return false;
                }
            }
            return true;
        }
    }
    
    作者:一只粗糙的疯子
    链接:https://leetcode.cn/problems/odd-string-difference/solutions/2282834/chai-zhi-shu-zu-bu-tong-de-zi-fu-chuan-b-siph/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

到了这里,关于【每日一题Day217】LC2451差值数组不同的字符串 | 枚举+变量记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【每日一题Day222】LC1110删点成林 | dfs后序

    给出二叉树的根节点 root ,树上每个节点都有一个不同的值。 如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。 返回森林中的每棵树。你可以按任意顺序组织答案。 又是一段瓶颈期 2023/5/30 思路 遍历树时,如果

    2024年02月07日
    浏览(33)
  • 【每日一题Day256】LC2600K 件物品的最大和

    袋子中装有一些物品,每个物品上都标记着数字 1 、 0 或 -1 。 给你四个非负整数 numOnes 、 numZeros 、 numNegOnes 和 k 。 袋子最初包含: numOnes 件标记为 1 的物品。 numZeroes 件标记为 0 的物品。 numNegOnes 件标记为 -1 的物品。 现计划从这些物品中恰好选出 k 件物品。返回所有可行

    2024年02月12日
    浏览(90)
  • 【每日一题Day266】LC18四数之和 | 排序+双指针

    四数之和【 LC18 】 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且 不重复 的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复): 0 = a, b, c, d n a 、 b 、 c 和 d 互不相同 nums[a] + nums[b]

    2024年02月16日
    浏览(31)
  • 【每日一题Day262】LC1911最大子序列交替和 | dp

    最大子序列交替和【LC1911】 一个下标从 0 开始的数组的 交替和 定义为 偶数 下标处元素之 和 减去 奇数 下标处元素之 和 。 比方说,数组 [4,2,5,3] 的交替和为 (4 + 5) - (2 + 3) = 4 。 给你一个数组 nums ,请你返回 nums 中任意子序列的 最大交替和 (子序列的下标 重新 从 0 开始编

    2024年02月15日
    浏览(28)
  • 【每日一题Day224】LC2517礼盒的最大甜蜜度 | 二分答案

    礼盒的最大甜蜜度【LC2517】 You are given an array of positive integers price where price[i] denotes the price of the ith candy and a positive integer k . The store sells baskets of k distinct candies. The tastiness of a candy basket is the smallest absolute difference of the prices of any two candies in the basket. Return the maximum tastiness of a

    2024年02月07日
    浏览(29)
  • 【每日一题Day208】LC1335工作计划的最低难度 | 动态规划

    工作计划的最低难度【LC1335】 你需要制定一份 d 天的工作计划表。工作之间存在依赖,要想执行第 i 项工作,你必须完成全部 j 项工作( 0 = j i )。 你每天 至少 需要完成一项任务。工作计划的总难度是这 d 天每一天的难度之和,而一天的工作难度是当天应该完成工作的最大

    2024年02月05日
    浏览(59)
  • 【每日一题Day267】LC834树中距离之和 | 换根dp

    树中距离之和【LC834】 给定一个无向、连通的树。树中有 n 个标记为 0...n-1 的节点以及 n-1 条边 。 给定整数 n 和数组 edges , edges[i] = [ai, bi] 表示树中的节点 ai 和 bi 之间有一条边。 返回长度为 n 的数组 answer ,其中 answer[i] 是树中第 i 个节点与所有其他节点之间的距离之和。

    2024年02月16日
    浏览(29)
  • 【每日一题Day292】LC1572矩阵对角线元素的和 模拟

    思路 简单模拟,主对角线的元素横纵坐标相等,副对角线的元素横纵坐标相加为n-1,注意避免重复计算 实现 复杂度 时间复杂度: O ( log ⁡ n ) mathcal{O}(log n) O ( lo g n ) 空间复杂度: O ( 1 ) mathcal{O}(1) O ( 1 )

    2024年02月13日
    浏览(29)
  • 【每日一题Day191】LC2423删除字符使频率相同 | 枚举 分类讨论

    给你一个下标从 0 开始的字符串 word ,字符串只包含小写英文字母。你需要选择 一个 下标并 删除 下标处的字符,使得 word 中剩余每个字母出现 频率 相同。 如果删除一个字母后, word 中剩余所有字母的出现频率都相同,那么返回 true ,否则返回 false 。 注意: 字母 x 的 频

    2024年02月01日
    浏览(32)
  • 【每日一题Day331】LC2560打家劫舍 IV | 二分查找 + 贪心

    打家劫舍 IV【LC2560】 沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取相邻的房屋 。 小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃取的 最大金额

    2024年02月07日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包