3610. 找位置(华中科技大学考研机试题)

3610. 找位置

⭐️难度:简单(其实中等)

⭐️类型:查找

📖题目:题目链接

对给定的一个字符串,找出有重复的字符,并给出其位置。

输入格式

共一行,一个由字母和数字组成的字符串。

输出格式

统计所有重复出现的字符,并按照第一次出现的先后顺序,每行输出一个字符的相关信息。

每个字符按从小到大顺序输出它出现过的位置下标,占一行,具体格式参考样例。

注意:给定字符串中字符的下标从左到右,从 0 开始。

数据范围

输入字符串长度不超过 100。

输入样例:

abcaaAB12ab12

输出样例:

a:0,a:3,a:4,a:9

b:1,b:10

1:7,1:11

2:8,2:12

🌟思路:

需要一个map数据结构,map<char,vector<int> >记录<字符,字符在字符串的位置集合>;

还需要一个vector数据结构,记录所有重复出现的字符 第一次出现的位置,好后续根据各字符第一次出现的次序进行排序。

📚题解:

⭕️注意输出的格式

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<vector>  // vector不需要.h
#include<list>
#include<set>  // // 可以用 set 和 multiset
#include<unordered_set> // 可以用 unordered_set 和 unordered_multiset
#include<map>  // 可以用 map 和 multimap
#include<unordered_map> // 可以用 unordered_map 和 unordered_multimap
#include<algorithm>
#include<string>
#include<iostream>
#include<queue>
#include<stack>

using namespace std;


int main() {
    char str[200] = { 0 };
    scanf("%s", str);

    map<char, vector<int>> index;  // 记录每个字符出现的位置
    vector<char> first;  // 记录每个字符第一次出现的位置

    for (int i = 0;str[i] != '\0';i++) {
        index[str[i]].push_back(i);   // index[str[i]]相当于是一个动态数组,可以调用push_back方法
        // 如果是第一次出现, 就把这个字符填进动态数组中
        if (index[str[i]].size() == 1) {
            first.push_back(str[i]);  
        }
    }

    // 从first里面取字符 到index里面查看位置
    vector<char>::iterator seqit;  // 遍历字符
    for (seqit = first.begin();seqit != first.end();seqit++) {
        if (index[*seqit].size() > 1) {  // 当前遍历的字符出现次数大于1,就打印
            vector<int>::iterator posit;  // 遍历字符出现的顺序
            posit = index[*seqit].begin();
            printf("%c:%d", *seqit, *posit);  // 首列打印格式
            for (posit = index[*seqit].begin() + 1;posit != index[*seqit].end();posit++) {  // 除首列外打印格式
                printf(",%c:%d", *seqit, *posit);
            }
            printf("\n");
        }
    }
    
    return 0;
}
相关推荐
秋天的怀念_David5 小时前
算法一千零一夜 · 第十四夜 幻方与奇妙的二进制
java·程序人生·算法
薛定e的猫咪5 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
薛定e的猫咪5 小时前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习
小羊没烦恼!7 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
wanderist.7 小时前
202609CSP认证P3
算法
云淡风轻~窗明几净8 小时前
角谷猜想最接近严格证明的测试 Version1.1.1
人工智能·算法·机器学习·图论
机器学习之心8 小时前
PINN × SVM × NSGA-II × 熵权TOPSIS:一套跑通「建模—优化—决策」的多目标优化框架
算法·机器学习·支持向量机
别动我齐刘海9 小时前
机器人 C++ / 系统联调补强2——异常处理、Protobuf
linux·c++·人工智能·学习·算法·机器学习·机器人
荆棘鸟智能9 小时前
短历时洪水预报算法实践:水文模型与 LightGBM 残差订正融合
人工智能·算法·机器人
葫三生10 小时前
关于三生原理系列被技术开发社区批量收录或引发策展边界讨论的一种思考
大数据·人工智能·深度学习·算法·机器学习·数据挖掘·开源