题解 | #找位置#
找位置
https://www.nowcoder.com/practice/e3b2cc44aa9b4851bdca89dd79c53150
#include <cstdio> #include <iostream> #include <vector> #include <cstring> using namespace std; /** 参考题解 https://blog.nowcoder.net/n/057ba31277ec452ab3c3a87b6a9a4999 */ vector <int> arr[128];//记录每个字符在字符串中的下标 bool visit[128];//记录字符串中的一个字符是否已经输出 void init(string str){ for(int i = 0; i < str.size(); i ++){ arr[str[i]].push_back(i); } } int main() { string str; while(cin >> str){ memset(visit, false, sizeof(visit)); init(str); for(int i = 0; i < str.size(); i ++){//按字符串的顺序输出 if(!visit[str[i]] && arr[str[i]].size() > 1){//该字符为第一次被访问到,且在字符串中不止出现一次 for(int j = 0; j < arr[str[i]].size(); j ++){//输出该字符在原字符串中的所有下标,由arr记录 if(j == 0) printf("%c:%d", str[i], arr[str[i]][j]); else printf(",%c:%d", str[i], arr[str[i]][j]); visit[str[i]] = true; } cout << endl; } } } return 0; } // 64 位输出请用 printf("%lld")