题解 | #找位置#
找位置
https://www.nowcoder.com/practice/e3b2cc44aa9b4851bdca89dd79c53150
#include <climits>
#include <iostream>
#include<map>
#include<bits/stdc++.h>
#include<string>
using namespace std;
struct ele
{
char ch ;
int order ;
} ;
template <class T>
class comp
{
public :
bool operator()(const T & lhs , const T & rhs)
{
return lhs.ch <rhs.ch ;
}
} ;
int main() {
// vector<ele> s ;
// string ts ;
// cin>> ts ;
// // if(ts.size() == 1)
// // {
// // }
// ele it ;
// for(int i = 0 ; i < ts.size() ;++ i )
// {
// it.ch = ts[i] ;
// it.order = i ;
// s.push_back(it) ;
// }
// sort(s.begin() , s.end() , comp<ele>() ) ;
// // for(auto it: s)
// // {
// // cout<<it.ch<<endl ;
// // }
// int st = 0 ;
// for(int i = 1; i<s.size() ; ++ i )
// {
// if(s[i].ch == s[i-1].ch)
// {
// }
// else
// {
// if(i-st <= 1)
// {
// st = i ;
// }
// else {
// while(st < i)
// {
// cout<<s[st].ch<<":"<<s[st].order<<",";
// st++ ;
// }
// st = i ;
// }
// }
// if(i -st >1 )
// {
// while(st <= i)
// {
// cout<<s[st].ch<<":"<<s[st].order<<"," ;
// st++ ;
// }
// }
// }
vector<ele> st;
map<char , vector<int>> mp ;
string s ;
cin>>s ;
for(int i = 0 ; i < s.size() ; ++ i)
{
mp[s[i]].push_back(i);
// auto it = mp.find(s[i]) ;
// vector<int> tmp = it->second ;
// cout<<"tmp.size()"<<tmp.size()<<endl ;
// if(tmp.size() <=2)
// {
// ele it ;
// if(tmp.size() == 1)
// {
// it.ch = s[i] ;
// it.order = tmp[0] ;
// cout<<"it.ch:"<<it.ch<<endl ;
// st.push_back(it) ;
// }
// if(tmp.size() == 2)
// {
// it.ch = s[i] ;
// it.order = tmp[1] ;
// cout<<"it.ch"<<it.ch ;
// st.push_back(it) ;
// }
// }
// else
// {
// ele it ;
// it.ch = s[i] ;
// it.order = i ;
// cout<<"it.ch "<<it.ch<<endl ;
// st.push_back(it) ;
// }
}
// for(auto it : mp)
// {
// for(int i = 0 ; i < it.second.size() ; ++ i)
// {
// cout<<it.first<<":"<<it.second[i] <<endl ; ;
// }
// }
//要安装位置顺序 输出 此时我们已经有了 每个字母的位置 , 继续遍历对每个字母看是否有
for(int i = 0 ; i < s.size() ;++ i )
{
if(mp[s[i]].size() >1 && mp[s[i]][0]!=INT_MAX ) // 对应mp键的大小大于 1 并且没有访问过
{
for(int j = 0 ; j < mp[s[i]].size() ; ++ j)
{
if( j ==mp[s[i]].size() -1 )
{
cout<<s[i]<<":"<<mp[s[i]][j]<<endl ;
break ;
}
cout<<s[i]<<":"<<mp[s[i]][j]<<"," ;
}
mp[s[i]][0] = INT_MAX ;
}
}
}
// 64 位输出请用 printf("%lld")
