题解 | #小红切字符串# 两次遍历

小红切字符串

http://www.nowcoder.com/questionTerminal/f3ff2b43d0ee4c6ca7af9e93f81d382b

简单的两次遍历,第一次遍历计算整个字符串里元音字母和辅音字母的个数;第二次遍历枚举分割点,并维护当前左侧子串的元音字母和辅音字母的个数。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        char[] str = in.next().toCharArray();
        int len = str.length;
        int totalPos = 0, totalNeg = 0;
        for (int i = 0; i < len; i++) {
            if (str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' ||
                    str[i] == 'u') {
                totalPos++;
            } else {
                totalNeg++;
            }
        }

        int curPos = 0, curNeg = 0, ans = 0;
        // 枚举切割的位置 [0, i] [i, len - 1] 注意遍历到len - 2就行;如果到len - 1就是一个字符串了
        for (int i = 0; i < len - 1; i++) {
            if (str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' ||
                    str[i] == 'u') {
                curPos++;
            } else {
                curNeg++;
            }

            if(Math.abs(curPos - curNeg) == Math.abs((totalPos - curPos) - (totalNeg - curNeg))) {
                ans++;
            }
        }
        System.out.println(ans);

    }
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务