首页 > 其他分享 >【LeeCode】2399. 检查相同字母间的距离

【LeeCode】2399. 检查相同字母间的距离

时间:2023-04-09 22:01:39浏览次数:46  
标签:distance int 字母 Solution LeeCode new public checkDistances 2399

【题目描述】

给你一个下标从 0 开始的字符串 s ,该字符串仅由小写英文字母组成,s 中的每个字母都 恰好 出现 两次 。另给你一个下标从 0 开始、长度为 26 的的整数数组 distance 。

字母表中的每个字母按从 0 到 25 依次编号(即,'a' -> 0'b' -> 1'c' -> 2, ... , 'z' -> 25)。

在一个 匀整 字符串中,第 i 个字母的两次出现之间的字母数量是 distance[i] 。如果第 i 个字母没有在 s 中出现,那么 distance[i] 可以 忽略 。

如果 s 是一个 匀整 字符串,返回 true ;否则,返回 false 。

 https://leetcode.cn/problems/check-distances-between-same-letters/


【示例】

【LeeCode】2399. 检查相同字母间的距离_字符串

【代码】LeeCode-枚举

【LeeCode】2399. 检查相同字母间的距离_java_02

package com.company;
import java.util.*;
// 2023-04-09

class Solution {
    public boolean checkDistances(String s, int[] distance) {
        int len = s.length();
        for (int i = 0; i < len; i++){
            for (int j = i + 1; j < len; j++){
                if (s.charAt(i) == s.charAt(j) && distance[s.charAt(i) - 'a'] != j - i - 1){
                    return false;
                }
            }
        }
        return true;
    }
}

public class Test {
    public static void main(String[] args) {
        new Solution().checkDistances("abaccb", new int[]{1,3,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}); // 输出: true
        new Solution().checkDistances("aa", new int[]{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}); // 输出:false
    }
}



【代码】LeeCode-模拟

由于题目中每个字母恰好出现两次,因此我们使用数组 firstIndex记录每个字母从左到右第一次出现的位置,当该字母第二次出现时,减去第一次出现的位置即可得到两个相同字母之间的字母数量。

初始化 firstIndex中的元素全为 0,为了方便计算,记录字符 s[i]出现的位置为 i+1。

按照上述检测所有的字符,如果所有的字符都满足匀整性,则返回 true,否则返回 false

package com.company;
import java.util.*;
// 2023-04-09

class Solution {
    public boolean checkDistances(String s, int[] distance) {
        int[] firstIndex = new int[26];
        for (int i = 0; i < s.length(); i++){
            int idx = s.charAt(i) - 'a';
            if (firstIndex[idx] != 0 && i - firstIndex[idx] != distance[idx]){
                return false;
            }
            // 第2次的i - 第一次的idx - 1 == 中间出现的次数
            firstIndex[idx] = i + 1;
        }
        return true;
    }
}

public class Test {
    public static void main(String[] args) {
        new Solution().checkDistances("abaccb", new int[]{1,3,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}); // 输出: true
        new Solution().checkDistances("aa", new int[]{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}); // 输出:false
    }
}


【代码】admin-枚举

思路: s字符先去重, 然后判断前后2个相同字符出现的下标是否等于distance[i]中对应的值

181 / 335 个通过的测试用例     代码不完善, 没考虑distance[i]中字符没出现的处理

package com.company;
import java.util.*;
// 2023-04-09

class Solution {
    public boolean checkDistances(String s, int[] distance) {
        List<String> list = Arrays.asList(s);
        Set<String> set = new HashSet<>(list);
        String[] strings = set.stream().toArray(String[]::new);

        for (int i = 0; i < strings.length; i++){
            int idx = strings[i].charAt(i) - 'a';
            int left = s.indexOf(strings[i]);
            // 如果找不到,则表示不存在
            if (left < 0) continue;
            int right = s.lastIndexOf(strings[i]);
            if (right - left - 1 != distance[idx]){
                return false;
            }
        }
        return true;
    }
}

public class Test {
    public static void main(String[] args) {
        new Solution().checkDistances("abaccb", new int[]{1,3,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}); // 输出: true
        new Solution().checkDistances("aa", new int[]{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}); // 输出:false
    }
}

标签:distance,int,字母,Solution,LeeCode,new,public,checkDistances,2399
From: https://blog.51cto.com/u_13682316/6179244

相关文章

  • [oeasy]python0131_[趣味拓展]各种符号_汉语拼音符号_中文全角英文字母_中文全角标点
    各种符号回忆上次内容中文字符可以有各种分类方法声母拼音检字法韵母合辙押韵的分类偏旁部首实际上unicode的排序方法我们以前勇闯地下城时候获得了一把屠龙宝刀给他镶上了❤️宝石这宝石应该如何理解?今天我们就来彻底解密红色爱心的原理闭环首先是文字我们的汉字可以构成一个闭......
  • [oeasy]python0131_[趣味拓展]各种符号_汉语拼音符号_中文全角英文字母_中文全角标点
    各种符号回忆上次内容中文字符可以有各种分类方法声母拼音检字法 韵母合辙押韵的分类 偏旁部首实际上unicode的排序方法  ​ 添加图片注释,不超过140字(可选) 我们以前勇闯地下城时候获得了一把屠龙宝......
  • 希腊字母大小写及读音表
    ......
  • * 编程:当前项目的根目录 c.txt 文件中的内容为”abddbskshlsjdhhhiw”;编写程序读取文
    1packageio.homework;23importjava.io.FileReader;4importjava.io.FileWriter;5importjava.io.Reader;6importjava.io.Writer;78publicclassq18{9publicstaticvoidmain(String[]args){10try(Readerfr=newFileReader......
  • 面试题 17.05. 字母与数字
    题目链接:面试题17.05.字母与数字方法:TwoSum解题思路(1)将字符量化为\(+1\),数字量化为\(-1\),那么当子数组的和\(subSum=0\)时,表示子数组中的字符和数字的数量相等;(2)\(subSum=s[j]-s[i],j>=i,i=1,2,...\),\(s[i]\)表示前\(i\)个元素的和;(3)即找\(s[j]-s[i]=0\),也即......
  • 1138. 字母板上的路径
    题目链接:1138.字母板上的路径方法:模拟解题思路为了使得移动次数最小,每次移动方式为,"直角移动"(如下图),但由于\(z\)字母位置的特殊性,当其作为目标字母和当前字母时,为了避免越界问题,需要调整\(x\)和\(y\)方向上移动的顺序。代码classSolution{public:stringalph......
  • 文件夹批量改名工具,将首写字母改为大写
    怎么处理文件,比如快速修改文件夹名称,将首写字母改为大写?不知道如何操作的宝贝们,下面请随小编一起来试试吧,希望能给大家带来帮助。所需工具一台电脑文件夹素材若干操作步骤步骤1:在处理之前,最好将需要修改的文件夹都保存在同一个文件夹之中,方便提取步骤2:进入【文件批量改名高手】,单击......
  • 【LeeCode】162. 寻找峰值
    【题目描述】峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1]=nums[n]=-∞ 。你必须实现时间复杂度为 O(logn) 的算法来解决此问题......
  • 【LeeCode】441. 排列硬币
    【题目描述】你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。给你一个数字 n ,计算并返回可形成 完整阶梯行 的总行数。https://leetcode.cn/problems/arranging-coins/【示例......
  • 基于模板和形态学处理的车牌检测分割和识别matlab仿真,可以识别其中的一个英文字母和
    1.算法描述       车牌识别系统(VehicleLicensePlateRecognition,VLPR)是计算机视频图像识别技术在车辆牌照识别中的一种应用。车牌识别在高速公路车辆管理中得到广泛应用,电子收费(ETC)系统中,也是结合DSRC技术识别车辆身份的主要手段。        车牌识别技术要......