输出:
-1
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
用例四:
输入:
MMM
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
输出:
-1
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
python解法
解题思路: 输入的字符串 s 代表一个排列,其中字符 ‘M’ 和 ‘I’ 代表物品和箱子。 目标是通过判断字符 ‘M’ 和 ‘I’ 的相对位置来计算可以形成多少对 “箱子”。 每对 “箱子” 由一个 ‘M’ 和一个 ‘I’ 组成,可以是 ‘M’ 在前,‘I’ 在后;也可以是 ‘I’ 在前,‘M’ 在后。 遍历字符串,如果当前字符是 ‘M’,则检查其左右相邻的字符是否是 ‘I’,并确保不会重复计算。 如果找不到匹配的 ‘I’ 或者有不符合条件的字符排列,则返回 -1。
s = input ( )
def calc_boxes ( s) :
l = len ( s)
count = 0
i = 0
while i < l:
if s[ i] == 'M' :
if i + 1 < l and s[ i + 1 ] == 'I' :
count += 1
i += 2
elif i - 1 >= 0 and s[ i - 1 ] == 'I' :
count += 1
i += 1
else :
return - 1
else :
i += 1
return count
print ( calc_boxes( s) )
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
java解法
解题思路 给定一个字符串,其中字符 ‘M’ 表示机器,字符 ‘I’ 表示电箱。目标是计算出能够组成多少个机器与电箱的配对,且每个配对必须由一个 ‘M’ 和一个 ‘I’ 组成。 配对时,优先选择将 ‘M’ 与其右侧的 ‘I’ 配对,如果右侧没有 ‘I’,则尝试与左侧的 ‘I’ 配对。 如果无法找到任何有效的配对,则返回 -1。 遍历字符串时,如果 ‘M’ 已经与电箱配对成功,则跳过这部分字符,继续检查下一个可能的配对
import java. util. Scanner ;
public class Main {
public static void main ( String [ ] args) {
Scanner sc = new Scanner ( System . in) ;
String input = sc. next ( ) ;
System . out. println ( getMinBoxes ( input) ) ;
}
public static int getMinBoxes ( String str) {
return countValidBoxes ( str) ;
}
private static int countValidBoxes ( String str) {
int length = str. length ( ) ;
int totalBoxes = 0 ;
for ( int i = 0 ; i < length; i++ ) {
if ( isMachine ( str, i) ) {
if ( canPlaceRight ( str, i) ) {
totalBoxes++ ;
i += 2 ;
}
else if ( canPlaceLeft ( str, i) ) {
totalBoxes++ ;
}
else {
return - 1 ;
}
}
}
return totalBoxes;
}
private static boolean isMachine ( String str, int index) {
return str. charAt ( index) == 'M' ;
}
private static boolean canPlaceRight ( String str, int index) {
return index + 1 < str. length ( ) && str. charAt ( index + 1 ) == 'I' ;
}
private static boolean canPlaceLeft ( String str, int index) {
return index - 1 >= 0 && str. charAt ( index - 1 ) == 'I' ;
}
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
C++解法
更新中
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
C解法
更新中
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
JS解法
更新中
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
注意:
如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。 解题不易,如对您有帮助,欢迎点赞/收藏
评论记录:
回复评论: