题解 | 找位置 两个map,一个记录字符位置,一个记录出现先后顺序
找位置
https://www.nowcoder.com/practice/e3b2cc44aa9b4851bdca89dd79c53150
#include <iostream> #include <map> #include <vector> #include <algorithm> using namespace std; int main() { char str[200] = { 0 }; // 字符串 //记录每个字符的位置 一对多 // !!! 相同字符,可以按照先后顺序往 动态数组 存入位置,即一个字符,对应多个位置 // 如 字符a 动态数组中 2 表示位置为2 map<char, vector<int>> timesMap; vector<char> charSeq; // 记录每个字符出现的先后顺序 cin >> str; // 字符串结束符 '\0' for (int i = 0; str[i] != '\0'; i++) { //timesMap[str[i]]得到value,即vector<int>数组 timesMap[str[i]].push_back( i); // 把某个字符的位置记录到动态数组中 // 如果是第一次出现 if (timesMap[str[i]].size() == 1) { charSeq.push_back(str[i]); // 记录输入的先后顺序(不会有重复) } } // 按先后打印重复字符timesMap[str[i]].size()>=2 vector<char>::iterator seqIt; for (seqIt = charSeq.begin(); seqIt != charSeq.end(); seqIt++) { if (timesMap[*seqIt].size() >= 2) { vector<int>::iterator it; it = timesMap[*seqIt].begin(); cout << *seqIt << ":" << *it; // 为了格式单独打印 // 单独打印了一个,下面加1开始 for (it = timesMap[*seqIt].begin() + 1; it != timesMap[*seqIt].end(); it++) { cout << "," << *seqIt << ":" << *it; } cout << endl; // 重复才打印 } } return 0; }#考研##复试练习##笔试#
2025考研复试 文章被收录于专栏
复试ing,努力中。。。