题目描述:
小明正在规划一个大型数据中心机房,为了使得机柜上的机器都能正常满负荷工作,需要确保在每个机柜边上至少要有一个电箱。
为了简化题目,假设这个机房是一整排,M表示机柜,I表示间隔,请你返回这整排机柜,至少需要多少个电箱。 如果无解请返回 -1 。输入描述:
cabinets = "MIIM"
其中M表示机柜,I表示间隔
输出描述:
2
表示至少需要2个电箱
补充说明:
1<= strlen(cabinets) <= 10000
其中 cabinets[i] = ‘M’ 或者 'I'
收起
示例1
输入:
MIIM
输出:
2
说明:
示例2
输入:
MIM
输出:
1
说明:
示例3
输入:
M
输出:
-1
说明:
示例4
输入:
MMM
输出:
-1
说明:
示例5
输入:
I
输出:
0
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String string = sc.nextLine();
int res = 0;
for(int i=0;i<string.length();i++){
char c =string.charAt(i);
if(c =='M'){
if(i+1<string.length()&&string.charAt(i+1)=='I'){
res ++;
i+=2;
}else if(i-1>=0&&string.charAt(i-1)=='I'){
res ++;
}else{
res = -1;
break;
}
}
}
System.out.println(res);
}
}
import sys
def get_num(s):
if len(s) < 1:
return 0
n_s = s.replace("MIM", "S")
res = (len(s)-len(n_s))/2
d_s = n_s.replace("MI", "S")
res = res + len(n_s)-len(d_s)
f_s = d_s.replace("IM", "S")
res = res + len(d_s)-len(f_s)
if "M" in f_s:
res = -1
print(int(res))
for line in sys.stdin:
s = line.strip()
get_num(s)
#include <iostream>
using namespace std;
int main()
{
string s;
getline(cin,s);
int sum=0;
int flag1=0,flag2=0;
int a[10001];
for(int i=0;i<10000;i++) a[i]=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='M') flag1=1;
if(s[i]=='I') flag2=1;
if(s[i]=='M'&&s[i+1]=='I')
{
if(!a[i]&&!a[i+1])
{
if(s[i-1]!='I'||(s[i-1]=='I'&&!a[i-1]))
{
sum++;
a[i+1]=1;
}
}
a[i]=1;
}
if(s[i]=='M'&&s[i-1]=='I')
{
if(!a[i-1]&&!a[i])
{
if(s[i+1]!='I'||(s[i+1]=='I'&&!a[i+1]))
{
sum++;
a[i-1]=1;
}
}
a[i]=1;
}
}
if(flag1&&!flag2) cout<<-1;
if(!flag1&&flag2) cout<<0;
if(sum>=0&&flag1&&flag2) cout<<sum;
return 0;
}