【练习记录】2022年春夏笔试-C++后端
作者:互联网
字符串冒泡排序
有一个字符串,组成只有CJ两个字母,每次只能交换相邻两个的次序,最少多少次可以让CJ交替出现?
输入:
整数n(1≤n≤10^6)
输出:最少排序次数,如果不能排序输出-1
样例输入:
4
CCJJ
样例输出:
1
分析:
一道冒泡排序的典型问题。注意①上下限,②下标一起变(当然用哈希表应该是更合理的)
#include <iostream>
#include <string>
using namespace std;
int main(){
long long n;
cin>>n;
string str;
cin>>str;
/* cout<<str<<endl;*/
int S = 0;
for(int i = 1; i < str.length();i++){
if (str[i-1]==str[i]){
for(int j = i+1; j< str.length(); j++){
if (str[j] != str[i]){
swap(str[j],str[i]);
S++;
}
}
}
}
int kk = 1;
for(int i = 1; i < str.length();i++){
if(str[i] == str[i-1])
kk = 0;
}
if(kk==0)cout<<-1<<endl;
else cout<<S<<endl;
return 0;
}
标签:CJ,2022,年春夏,C++,样例,冒泡排序,long,str,include 来源: https://www.cnblogs.com/translucent/p/16183339.html