首页 > 技术交流 > 今早字节跳动的第二题没有通过全部case原因

今早字节跳动的第二题没有通过全部case原因

头像
black-six
编辑于 2019-03-18 13:28:23 app内打开
赞 1 | 收藏 2 | 回复21 | 浏览3002
我只通过了百分之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只通过了百分之四十四,难受。。。。

21条回帖

回帖
加载中...

近期热帖

热门推荐