今早字节跳动的第二题没有通过全部case原因
我只通过了百分之40多,代码缺陷我没查出来,我最后猛然想到了是不是case有中文,一测试,中文输入乱码,等我解决后已经关闭考试了。。。请问通过的大佬们能否告知以下呢,万分感谢!
第二题是字符串去重,三个相同字母删一个,AABB删一个B,从左往右运算
以下是我编写的代码:
import java.util.Scanner;public class Main { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in,"gbk"); int n = sc.nextInt();//获取N StringBuilder[] val = new StringBuilder[n];//创建n个StringBuilder,不用string是因为StringBuilder方便删除 for (int i = 0; i < n; i++) { val[i] = new StringBuilder(sc.next());//循环获取n个字符串 }for (int i = 0; i < n; i++) {//遍历每个字符串 StringBuilder s = val[i];//当前字符串 int length = s.length();//当前字符串长度,删除之后会变化 for (int j = 2; j < length; j++) {//直接从第三个字符开始 if ((s.charAt(j-2) == s.charAt(j-1)) && (s.charAt(j-1) == s.charAt(j))) {//如果前面二个包括本身都相等 s.deleteCharAt(j);//删除j位置的字符 j = 2;//重置j=2,再来一次 length = s.length();//修改停止长度 continue;//进入下一次循环 } if (j >= 3 && (s.charAt(j-3) == s.charAt(j-2)) && (s.charAt(j-1) == s.charAt(j))) {//如果是AABB,下面代码同上 s.deleteCharAt(j-1); j = 2; length = s.length(); continue; } } } for (StringBuilder s : val) {//输出所有已修改的字符串 System.out.println(s); } } }
我好像发现了。。。。当匹配到三个或者AABB时,删除完了我把j重置为2,“j = 2;//重置j=2,再来一次”,这行代码,虽然紧接着continue了,但是j++。。。。然后j变成了3,如果恰巧这时的0,1,2三个字符是三个相同的相等的字符,它们被跳过了!所以case只通过了百分之四十四,难受。。。。
#春招##笔试题目#