有一个字符串,组成只有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; }