二维字符数组中字符串查找

2023-11-13

首先输入一个数字N,接着输入N行字符,每个字符用逗号分隔,最终形成一个N * N的字符数组。然后再输入一个待查找的目标字符串,在上面字符数组中查找是否出现目标字符串,查找的规则是在起始位置 从左向右 或者 从上向下,每个单元格的字符只出现一次。如果查找成功,输出目标字符在字符数组总的(i,j)下标,用逗号分隔;如果查找失败,则输出字符串"N"。

例如:

输入:

4

A,C,C,F

C,D,E,D

B,E,S,S

F,E,C,A

ACCESS

输出:

0,0,0,1,0,2,1,2,2,2,2,3

本题使用回溯算法

#include <iostream>
#include <vector>
#include <sstream>
using namespace std;

vector<vector<int>> result;
string word;
vector<vector<char>> array;

bool findWord(int iStart, int jStart, int index, vector<vector<int>> r) {
    if (index >= word.size()) {
        result = r;
        return true;
    }

    for (int i = iStart; i < array.size(); i++) {
        for (int j = jStart; j < array[0].size(); j++) {
            if (array[i][j] == word[index]) {
                r.push_back(vector<int>{i, j});
                if (findWord(i + 1, j, index + 1, r) || findWord(i, j + 1, index + 1, r))
                    return true;
            } else {
                if (findWord(i + 1, j, index, r) || findWord(i, j + 1, index, r))
                    return true;
            }
        }
    }

    return false;
}

int main() {
    word.clear();
    array.clear();

    int N;

    if (cin >> N) {
        if (N <= 0) {
            cout << "N" << endl;
            return 0;
        }
        string line;
        getline(cin, line);
        while (N-- > 0 && getline(cin, line)) {
            vector<char> v;
            string s;
            stringstream ss(line);
            while (getline(ss, s, ',')) {
                v.push_back(s[0]);
            }
            array.push_back(v);
        }

    }

    if (cin >> word) {
        if (word.size() == 0) {
            cout << "N" << endl;
            return 0;
        }

        vector<vector<int>> r;
        if (findWord(0, 0, 0, r)) {
            for (int i = 0; i < result.size(); i++) {
                if (i < result.size() - 1) {
                    cout << result[i][0] << "," << result[i][1] << ",";
                } else {
                    cout << result[i][0] << "," << result[i][1];
                }
            }
            cout << endl;
        } else {
            cout << "N" << endl;
        }
    }

    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二维字符数组中字符串查找 的相关文章

  • InvalidOperationException - 对象当前正在其他地方使用 - 红十字

    我有一个 C 桌面应用程序 其中我连续创建的一个线程从源 实际上是一台数码相机 获取图像并将其放在 GUI 中的面板 panel Image img 上 这必须是另一个线程 如它是控件的代码隐藏 该应用程序可以工作 但在某些机器上 我会在随
  • 每个托管线程是否都有自己对应的本机线程?

    我想知道是否在 Net 中创建托管线程 通过调用Thread Start 导致在后台创建一个本机线程 那么托管线程是否有对应的本机线程呢 如果是 当托管线程等待或睡眠时 是否意味着相应的本机线程也在等待或睡眠 是的 NET 线程映射到所有当
  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData

随机推荐

  • 设置myeclipse中.properties文件的编码方式

    打开myeclipse的 Window gt Perferences gt General gt Editors gt Context Types 或者 Window gt Perferences gt General gt Context
  • fluuter 包管理

    在pubspec yaml文件中 dependencies 字段下添加开发依赖 然后 运行 flutter pub get 获取依赖包
  • 编译 openwrt 及初始配置-及部分排错

    主机为 ubuntu 14 x64 硬件 优酷土豆宝 cpuMT7620A 内存128M flash 32M 有2个源 用哪个也可以 git clone https github com openwrt openwrt git git cl
  • baidu apollo(1)—启动环境分析

    apollo平台 1 5 目前是基于ros框架来实现 外围丰富了各种自己的感知 认知 决策 规划模块 docker 环境配置 bash docker scripts install docker sh install docker sh主要
  • Linux指令学习(CentOs6.5)tail指令

    本文转载至 CentOS里tail命令详解 tail 名称 tail output the last part of files 输出文件最后的那部分内容 功能描述 tail命令从指定点开始将文件写到标准输出 使用 f选项可以方便的查阅正在
  • 基于YOLOv7的室内场景智能识别系统(源码&教程)

    1 项目背景 近年来 随着移动互联网与定位技术的发展 基于位置服务越来越多地出现在人们的日常生活中 虽然智能手机都包含很多基于位置服务的应用 但是传统的基于位置服务常常将服务范围划分为室内与室外两种场景 室内外无缝定位系统是人们关注及研究的
  • STM32CubeMX配置GPIO外部中断

    前言 用PA0来检测按键的输入信号 当按键按下时会由低电平变为高电平 1 配置RCC时钟 将RCC的High Speed Clock HSE 配置为Crystal Ceramic Resonator 将主频设置为72MHz 2 配置GPIO
  • 将Qt、OpenGL、GLSL以及Qt的Graphics-View框架组合

    将Qt OpenGL GLSL以及Qt的Graphics View框架结合 将Qt OpenGL GLSL以及Qt的Graphics View框架结合 九月份都快过去了 学生们也都开学了 我想校园也会热闹许多吧 在希赛上也相应地热闹了一些
  • nginx--启动脚本

    bin bash Use Startup script for the nginx HTTP Server Definition Global environment variable IFS t n unset f unalias una
  • 瞎玩物联网系列--Hello 树莓派

    条件 Raspberry Pi 3b 32G存储卡 mac 网线 面包板 led灯 杜邦线 传感器若干 系统安装 各种下载 官方镜像下载 树莓派实验室地址 刻录工具 etcher Microsoft Remote Desktop for M
  • 二叉搜索树的定义、查找、插入和删除

    二叉搜索树的定义 查找 插入和删除 原创 2016年07月21日 21 59 00 二叉搜索树的定义 二叉搜索树 也称有序二叉树 排序二叉树 是指一棵空树或者具有下列性质的二叉树 1 若任意节点的左子树不空 则左子树上所有结点的值均小于它的
  • 不用swap分区,用交换文件(转)

    不用swap分区 用交换文件 转 more 安装linux时 一般系统都要求划分一个分区作为交换分区 但现时大家的电脑内存一般都很大 系统交换文件的机会会越来越少 就以我的来说 本人安装的是redhat linux V7 3 内存是256M
  • BGP距离协议①

    边界网关协议 边界网关协议分为内部网关协议和外部网关协议 IGP 内部网关协议 RIP OSPF EGP 外部网关协议 BGP AS自治系统 由单一的机构 组织所管理的一系列IP网络及设备所构成的集合 使用AS自治系统来划分内部和外部网关协
  • 数据库原理 具有检查点的恢复技术

    1 为什么需要检查点 搜索整个日志文件需要耗费的时间很多 重做处理 重新执行 耗费了大量的时间 2 解决方案是什么 在日志文件中增加检查点 check point 记录 增加重新开始文件 恢复子系统在登录日志文件期间动态的维护日志 3 检查
  • CPU测试相关工具搜集

    CPU测试相关工具搜集 一 y cruncher CPU性能测试工具 二 CPU Z CPU参数查看工具 三 cachesize 读取CPU Cache信息 四 Flops CPU浮点运算性能测试工具 五 Open Hardware Mon
  • IDEA找不到Maven窗口

    有时候导入项目或者创建项目时候Maven窗口找不到了 然后指定项目的pom xml文件
  • 缘结西安

    2021年6月1日上午 CSDN创始人 董事长蒋涛 首席运营官钟晖 副总裁李超 长沙首席技术官陈玉龙 高校俱乐部负责人张建龙 市场总监段思倍等到达西安思源学院 与学校就校企合作达成共识 正式结为校企战略合作伙伴 下午 CSDN董事长蒋涛以
  • C++基础——拷贝构造函数

    前言 在上篇文章中 我简单介绍了一下类的两大特殊函数 构造函数和析构函数 构造函数主要用来进行对象的成员变量初始化操作 而析构函数主要用来对战斗后的战场做清理工作 当我们不写这些函数时 编译器会自动生成默认的构造与析构函数 帮助我们合理的运
  • 数据挖掘:探索性数据分析(EDA)

    数据挖掘 探索性数据分析 EDA 一 什么是探索性数据分析 EDA Exploratory Data Analysis 即对数据进行探索性的分析 充分了解数据 为之后的数据清洗和特征工程等提供想法和结论 在探索分析时 也可进行数据清洗的工作
  • 二维字符数组中字符串查找

    首先输入一个数字N 接着输入N行字符 每个字符用逗号分隔 最终形成一个N N的字符数组 然后再输入一个待查找的目标字符串 在上面字符数组中查找是否出现目标字符串 查找的规则是在起始位置 从左向右 或者 从上向下 每个单元格的字符只出现一次