2020秋招笔试—优雅的文章

优雅的文章

题目

任何一篇仅有英文字母的文章,如果大小写字母数量不相同,会被认为文章不优雅。现在要对给定的文章(即输入字符串)进行修改,使其变得优雅,请确定至少修改多少字符的大小写即可使文章变得优雅。输入的字符串一定是偶数长度的,输出修改次数即可。

示例
输入:
AAAb
输出:
1

思路

  1. 这种不确定修改方向只问修改次数的问题,在遍历时的flag设置成可以向上变化或者向下变化,即可统计修改次数。
  2. 这里我们可以设置一个计数器cnt,初值为0,假如遍历到大写就cnt++,遍历到小写就cnt–,遍历完成后输出cnt的绝对值的一半即可(输入一定是偶数个字母,那么cnt一定可以被2整除)。
  3. 假如问题要求输出至少一种修改方案,可在遍历时维护两个队列(数据结构可以根据对输出修改方案的要求进行选择),里面分别存大小写字母的下标,然后根据cnt的正负符号和大小选择修改对应下标的字母,减少部分时间花销。

代码

单纯统计修改次数的代码:

public class Solution {
    public int count(String str){
        if(str==null||str.length()==0)
            return 0;
        int cnt = 0;
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)>='a'&&str.charAt(i)<='z')
                cnt--;
            else if(str.charAt(i)>='A'&&str.charAt(i)<='Z')
                cnt++;
        }
        return Math.abs(cnt/2);
    }
}

输出一种修改方案的代码:

public class Solution {
   public String modify(String str){
        if(str==null||str.length()==0)
            return "";
        int cnt = 0;
        Queue<Integer> upper = new LinkedList<>();
        Queue<Integer> lower = new LinkedList<>();
        char[] chars = str.toCharArray();
        for(int i=0;i<chars.length;i++){
            if(str.charAt(i)>='a'&&str.charAt(i)<='z'){
                cnt--;
                lower.add(i);
            }

            else if(str.charAt(i)>='A'&&str.charAt(i)<='Z'){
                cnt++;
                upper.add(i);
            }
        }
        cnt /= 2;
        if(cnt<0){
            while (cnt++<0)
                chars[lower.poll()] -= 32;
        }
        else if(cnt>0){
            while (cnt-->0)
                chars[upper.poll()] += 32;
        }
        return new String(chars);
    }
 }

啊这个不需要图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值