首页 > 其他分享 >华为OD 增强的strstr

华为OD 增强的strstr

时间:2024-09-25 16:51:49浏览次数:9  
标签:map subLength strstr OD length 华为 str 字符串

题目描述

C 语言有一个库函数: char *strstr(const char *haystack, const char *needle) ,实现在字符串 haystack 中查找第一次出现字符串 needle 的位置,如果未找到则返回 null。

现要求实现一个strstr的增强函数,可以使用带可选段的字符串来模糊查询,与strstr一样返回首次查找到的字符串位置。

可选段使用“[]”标识,表示该位置是可选段中任意一个字符即可满足匹配条件。比如“a[bc]”表示可以匹配“ab”或“ac”。

注意目标字符串中可选段可能出现多次。

输入描述

与strstr函数一样,输入参数是两个字符串指针,分别是源字符串和目标字符串。

输出描述

与strstr函数不同,返回的是源字符串中,匹配子字符串相对于源字符串地址的偏移(从0开始算),如果没有匹配返回-1。

补充说明:源字符串中必定不包含‘[]’;目标字符串中‘[]’必定成对出现,且不会出现嵌套。

输入的字符串长度在[1,100]之间。

用例1

输入

abcd
b[cd]

输出

1

说明

相当于是在源字符串中查找bc或者bd,bc子字符串相对于abcd的偏移是1

import java.util.Scanner;
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        String subStr = in.nextLine();
        boolean tag = false;
        int subLength = 0;
        StringBuilder builder = new StringBuilder();
        Map<Integer, Set<Character>> map = new HashMap<Integer, Set<Character>>();
        //统计子串长度和子串每个索引位置上的匹配集,后续以滑动窗口来匹配map。
        for (int i = 0; i < subStr.length(); i++) {
            if (subStr.charAt(i) == '[') {
                tag = true;
            } else if (subStr.charAt(i) == ']') {
                tag = false;
                subLength++;
            } else {
                Set<Character> set;
                if (map.get(subLength) == null) {
                    set = new HashSet<Character>();
                } else {
                    set = map.get(subLength);
                }
                set.add(subStr.charAt(i));
                map.put(subLength, set);
                if (!tag) {
                    subLength ++;
                }
            }
        }
        for (int i = 0; i + subLength< str.length(); i++) {
            String str1 = str.substring(i, i + subLength);
            boolean flag = checkStr(str1, map);
            if (flag) {
                System.out.println(i);
                return;
            }
        }
        System.out.println(-1);
    }

    public static boolean checkStr(String str, Map<Integer, Set<Character>> map) {
        int length = 0;
        for (int i = 0; i < str.length(); i++) {
            if (map.get(i).contains(str.charAt(i))) {
                length++;
            }
        }
        if (length == str.length()) {
            return true;
        } else {
            return false;
        }
    }
}

标签:map,subLength,strstr,OD,length,华为,str,字符串
From: https://blog.csdn.net/zhaowei513/article/details/142528059

相关文章

  • 豆包MarsCode初体验,用 React 创建一个最经典的贪吃蛇游戏
    以下是「 豆包MarsCode 体验官」优秀文章,作者Find。背景在人工智能快速发展的时代,大模型(LLM)只要有足够的算力和数据就可以做到任何的事情,甚至可以模拟出另一个地球。LLM作为一个革命化的科技,可以取代很多岗位,甚至可以让人类达到“躺着领钱的时代”。Marscode作为一个新推出的IDE......
  • node/expressjs 连接与操作 MongoDB
    MongoDB 的安装、配置、启动、常见指令等,详见上一节“mongoDB简介” 以下将讲述 node/expressjs 与 mongoDB 的交互——连接与操作数据库 mongoDB注释:以下示例是采用express官网的生成器初始化项目的。数据库 mongoDB的操作运用的是mongoose插件, mong......
  • 基于nodejs+vue校园礼品销售系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景在数字化时代,随着校园生活的日益丰富与多元化,学生对于个性化、创意化礼品的需求日益增长。然而,传统的校园礼品销售模式往往受限于时间、空间及信息不对称等......
  • mongoDB 简介
    参考文档 https://www.runoob.com/mongodb/mongodb-tutorial.htmlmongoDB菜鸟教程https://mongodb.net.cn/manual/mongoDB中文官网 1. mongoDB 概述MongoDB是一个流行的开源文档型数据库,它使用类似JSON的文档模型存储数据,这使得数据......
  • 基于nodejs+vue校园零食商城系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网的飞速发展和数字化校园建设的不断推进,学生群体的消费习惯正悄然发生变化。传统校园内,学生购买零食往往依赖于实体小卖部或便利店,存在时间、空间......
  • 基于nodejs+vue校园论坛[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,校园信息化已成为提升教育质量、促进师生交流的重要途径。传统校园生活中,信息的传递往往受限于时间、空间,学生间的交流互动也局限......
  • Leetcode 626-换座位题目解析
    1.题目编写解决方案来交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。按 id 升序 返回结果表。 2.数据准备CreatetableIfNotExistsSeat(idint,studentvarchar(255));TruncatetableSeat;insertintoSeat(id,student)v......
  • Docker 运行 MongoDB
    Docker运行MongoDB实验环境宿主机:CentOSStreamrelease9Docker:DockerEngine27.3.1MongoDB:7.0.14Mongosh;2.3.1配置文件mongod.conf[karma@localhostkarmamongodb]$catmongod.conf|grep-vE"#|^$"storage:dbPath:/var/lib/mongodbsystemLog:des......
  • python使用pyinstaller打包exe的时候遇到:unknown encoding: idna
    python使用pyinstaller打包exe的时候遇到:unknownencoding:idna解决办法在程序开头加上importencodings.idna即可,如果idna没有安装,需要手动安装一下。#!/usr/bin/python#-*-coding:UTF-8-*-importencodings.idna......
  • 推荐一款AI智能编程助手CodeGeeX
    最近,使用了一款AI智能编程助手CodeGeeX,感觉还不错,推荐给大家。官网地址:https://codegeex.cn/一、安装教程IDEA中安装插件:https://codegeex.cn/downloadGuide#ideaVSCode中安装插件:https://codegeex.cn/downloadGuide#vscodeHBuilderX中安装插件:https://codegeex.cn/downloadGuide#......