题解 | #小红切字符串# 两次遍历
小红切字符串
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); } }