面试题|华为机试题

给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,不做转换。
输入描述:
输入为两行,第一行为参数K,第二行为字符串S。
输出描述:
输出转换后的字符串。
示例1
输入
3
12abc-abCABc-4aB@
输出
12abc-abc-ABC-4aB-@
说明
子串为12abc、abCABc、4aB@,第一个子串保留,后面的子串每3个字符一组为abC、ABc、4aB、@,abC中小写字母较多,转换为abc,ABc中大写字母较多,转换为ABC,4aB中大小写字母都为1个,不做转换,@中没有字母,连起来即12abc-abc-ABC-4aB-@
示例2
输入
12
12abc-abCABc-4aB@
输出
12abc-abCABc4aB@
说明
子串为12abc、abCABc、4aB@,第一个子串保留,后面的子串每12个字符一组为abCABc4aB@,这个子串中大小写字母都为4个,不做转换,连起来即12abc-abCABc4aB@

import java.util.Locale;

public class MainClass {
    public static void main(String[] args) {
        getAnswer("12abc-abCABc-4aB@",3);
    }

    /**
     * @param question
     * @param k
     */
    private static void getAnswer(String question,int k){
        String[] temp = question.split("-");
        StringBuffer a = new StringBuffer(temp[0]);
        String b = question.substring(temp[0].length()+1);
        b = b.replace("-","");
        while (b.length() >= k){
            String bf = b.substring(0, k);
            //大写字母多?
            if(isUpMore(bf)==1){
                bf = bf.toUpperCase();
            }else if(isUpMore(bf)==0){
               bf = bf.toLowerCase();
            }
            a.append("-").append(bf);
            b = b.substring(k);
        }
        if(b.length()>0){
            if(isUpMore(b)==1){
                b = b.toUpperCase();
            }else if(isUpMore(b)==0){
               b = b.toLowerCase();
            }
            a.append("-").append(b);
        }
        System.out.println(a.toString());
    }

    private static int  isUpMore(String s){
        int upNum = 0;
        int downNum = 0;
        for (int i = 0; i = 'A' && s.charAt(i) <= 'Z') {
               upNum++;
           }else if(s.charAt(i) >= 'a' && s.charAt(i) <= 'z'){
               downNum ++;
           }
        }
        if (upNum>downNum){
            return 1;
        }else  if (upNum

你可能感兴趣的:(面试题|华为机试题)