【力扣Java】2351.第一个出现两次的字母

2351.第一个出现两次的字母

给你一个由小写英文字母组成的字符串 s ,
请你找出并返回第一个出现 两次 的字母。
输入:s = “abccbaacz” 输出:“c”

import java.util.HashSet;
import java.util.Set;

//法一
// 执行用时:0 ms, 
// 内存消耗:39.5 MB

class Test{
    public char repeatedCharacter(String s) {
        int[] ints = new int[26];
        for (int i = 0; i < s.length(); i++) {
            int index = s.charAt(i) - 'a';
            ints[index]++;
            if (ints[index] > 1) {
                return s.charAt(i);
            }
        }
        return 'a';
    }
}
//法二 
//执行用时: 0 ms
//内存消耗: 39.2 MB

//if(!charSet.add(charArray[i])),可以直接利用Set的特性,
//Set没有重复,如果能添加成功,就直接返回。

class Test {
    public char repeatedCharacter(String s) {
        char[] charArray = s.toCharArray();
        Set charSet = new HashSet();
        for (int i = 0; i < charArray.length; ++i) {
            if (!charSet.add(charArray[i])) {
                return charArray[i];
            }
        }
        return 'a';
    }
}
//法三
//执行用时: 0 ms
//内存消耗: 39.5 MB
class Test {
    public char repeatedCharacter(String s) {
        int cnt[] = new int[26]; // [0,0,0···] 26个

        for (char ch : s.toCharArray()) { // 将字符串转换为字符数组。
            if (++cnt[ch - 'a'] == 2) { // ++i,先加后赋值
                return ch; // 出现次数=2,返回ch
            }
        }
        return 0;
        /*
         * "abccbaacz"
         * ch = a -> ++cnt[0] = [1,0,···]
         * ch = b -> ++cnt[1] = [1,1,···]
         * ch = c -> ++cnt[2] = [1,1,1···]
         * ch = c -> ++cnt[2] = [1,1,2,···]
         */

    }
}

主函数

public class The_first_letter_appears_twice {
    public static void main(String[] args) {
        Test t = new Test();
        char l = t.repeatedCharacter("abbccbaacz");
        System.out.println(l);

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值