题目:
输入:字符串(保证长度小于100),字符串包含数字、大小写字母,大中小括号,括号可以嵌套(保证括号成对)。
输出:将数字后面跟的括号内容按照数字重复拼接,然后整体倒叙输出。
例如:输入:abc3(A),输出:AAAcba。
解题: String s = scanner.nextLine();
StringBuilder sb = s.resolve(new StringBuilder(s)).reverse();
System.out.println(sb);
// 下面的i++之所以没有家在 for(; ;i++) 这里,是因为判断2里跳跃的是括号内的长度,不能自增1
StringBuilder resolve(StringBuilder s){ StringBuilder sb = new StringBuilder(); for(int i = 0; i < s.length();){ char c = s.charAt(i); if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z'){ // 判断1 sb.append(c); i++; }else if (c >= '0' || c <= '9'){ // 判断2 int num = c - '0'; for(int n = 0; n< num; n++){ sb.append(resolve(xxx)); } // j 表示数字后面跟的括号的反括号的下标 i = j + 1; } else if (c == '{' || c == '[' || c == '('){ // 判断3 int num = 1; sb.append(resolve(xxx)); // j 表示数字后面跟的括号的反括号的下标 i = j + 1; } else { // 判断4 sb.append(c); i++; } }代码写的有点low,但是我在执行代码的时候,碰到一些疑问:
疑问一:
我一开始只写了判断1和判断2,但是代码会超时,只成功了80%,
这时候我想到的是有没有可能输入了不带数字前缀的括号内容,所以增加了判断3,结果没变。
然后又增加了判断4,结果就通过了。
疑问点:是我的判断1和判断2(里面包含了判断括号),漏判了大小写字母和数字吗?还是虽然题目写明只有这些字符,但是实际输入了其他字符?如果是后者,那是不是题目不严谨?
疑问二:
在我调用StringBuilder的reverse()方法的时候,编译器自动提示reversed(),因为这个方法不常用,导致我没有记住正确的单词,结果编译反复提示找不到这个方法。没办法只能手写反转了。
疑问点:编译器这么low吗,一直提示错误的方法。(同样还有会提示字符串的size()方法而不是length()方法,也是个错的)
有人提醒我一下问题在哪里吗?
全部评论
(3) 回帖