题目描述:
给定一个英文字符串,写一段代码找出字符串中首先出现三次的英文字母
输入描述:
输入数据一个字符串,包括字母,数字
输出描述:
输出首先出现三次的那个英文字符
示例:
输入: Have you ever gone shopping
输出: e
解题思路:
1.校验字符串合法性后,将String
-> char[]
2.创建一个int[]
,长度为128,来记录每个字母出现的次数
3.将char[]
的每一个数据都拿出来比较,看是否在字母的ASCII码区间,如果在则此字母出现次数+1。
4.每一次循环的最后都要判断是否有字母出现的次数到达3次,到达三次则返回该字母。否则循环继续。
实现代码:
测试用例:
public static void main(String[] args) {
String str = "Have you ever gone shopping and";
System.out.println(searchTheLetterAppearThreeTimes(str));
System.out.println(searchTheLetterAppearThreeTimes("11111112"));
System.out.println(searchTheLetterAppearThreeTimes(""));
System.out.println(searchTheLetterAppearThreeTimes(null));
}
方法实现:
public static char searchTheLetterAppearThreeTimes(String str){
//1.校验字符串合法性
if (str == null ||str.length() == 0) {
throw new NullPointerException("The string cannot be empty or null");
}
//2.将String ->char[]
char[] c = str.toCharArray();
//3.用来计算字母出现的次数
int[] counter = new int[128];
for (int i = 0; i < c.length; i++) {
char temp = c[i];
//4.判断temp是否是字母
if ('A' <= temp && temp <= 'Z' || 'a' <= temp && temp <= 'z') {
//char类型的可以直接给int类型,会变成char的相应ASCII码
counter[temp]++;
}
if (counter[temp] == 3){
return temp;
}
}
throw new RuntimeException("can't find a letter that appears three times");
}