JavaInterview JavaInterview
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)

『Java面试+Java学习』
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)
  • 指南
  • 简历

  • Java

  • 面试

  • 算法

  • algorithm
  • leetcode
JavaInterview.cn
2025-06-09
目录

1864. 构成交替字符串需要的最小交换次数Java

文章发布较早,内容可能过时,阅读注意甄别。

# 题目

给你一个二进制字符串 s ,现需要将其转化为一个 交替字符串 。请你计算并返回转化所需的 最小 字符交换次数,如果无法完成转化,返回 -1 。

交替字符串 是指:相邻字符之间不存在相等情况的字符串。例如,字符串 "010" 和 "1010" 属于交替字符串,但 "0100" 不是。

任意两个字符都可以进行交换,不必相邻 。

示例 1:

输入:s = "111000"
输出:1
解释:交换位置 1 和 4:"111000" -> "101010" ,字符串变为交替字符串。

示例 2:

输入:s = "010"
输出:0
解释:字符串已经是交替字符串了,不需要交换。

示例 3:

输入:s = "1110"
输出:-1

提示:

  • 1 <= s.length <= 1000
  • s[i] 的值为 '0' 或 '1'

# 思路

统计奇数数位上‘0’的个数

# 解法

class Solution {
    public int minSwaps(String s) {
        int n = s.length();
        int count = 0;
        int oneCount = 0;
        for(int i = 0; i < n; i++){
            if(s.charAt(i) == '0'){
                count++;
                if(i % 2 == 0){
                    oneCount++;
                }
            }
        }
        if(n % 2 == 0){
            if(count != n / 2){
                return -1;
            }
            return Math.min(n / 2 - oneCount, oneCount);
        }
        if(count < n / 2 || count > n / 2 + 1){
            return -1;
        }
        if(count == n / 2){
            return oneCount;
        }else{
            return n / 2 + 1 - oneCount;
        }
    }
}

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

# 总结

  • 分析出几种情况,然后分别对各个情况实现
微信 支付宝
#Java
最近更新
01
1644.测试路径 Java
02-25
02
1888. 使二进制字符串字符交替的最少反转次数 Java
02-25
03
1890. 2020年最后一次登录 Java
02-25
更多文章>
Theme by Vdoing | Copyright © 2019-2026 JavaInterview.cn
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式