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);
}
}