面试官非常和蔼,非常友善。他先我进行了自我介绍,然后聊了下项目。聊的时间也不是太长,后来,问我对应聘的岗位有没有了解,自己为什么能胜任这个岗位? 期间,做了一道题,感觉腾讯非常重视做题。 那个题是这样的:
/** * 腾讯Android岗,二面面试题 《去除驼峰字符串》 * 面试官写的原题记不得了,大概意思是这样的: * 给定一个驼峰样式的字符串 例如“...adbabfgh.....”,其中bab为驼峰, 两个一样的字符夹着一个不一样的字符, 返回去掉所有驼峰的字符串。 * Created by Zheng548 on 2017/4/14 0014. * 转载请注明出处(注明作者,和原链接) * @author Zheng548 * 链接:http://blog.csdn.net/zheng548/article/details/70173634 */ public class T { public static void main(String[] args) { System.out.println(fun(" ")); System.out.println(fun("abele")); System.out.println(fun("abelea")); System.out.println(fun("abeleaea")); System.out.println(fun("abeleaeaa")); System.out.println(fun("abeleaeaaw")); System.out.println(fun("abeleaeaawq")); System.out.println(fun("abeleaeaawqk")); System.out.println(fun("abeleaeaawqkl")); } private static String fun(String str) { /** * 健壮性分析str == null 或者str.length <= 0 */ if (str == null || str.length() <= 0) { return null; } /** * 当字符串长度小于等于2,不可能存在驼峰,直接返回 */ if (str.length() <= 2) { return str; } StringBuilder sb = new StringBuilder(); int i; //全局变量i,用于遍历字符串 boolean flag = false; //标志位,用于递归出口条件判断。初始为false for (i = 0; i < str.length() - 2; i ++) { if (str.charAt(i) == str.charAt(i + 2) && str.charAt(i) != str.charAt(i + 1)) { //驼峰存在i = i + 2,同时外层for 循环 + 1,共计增加3 i = i + 2; flag = true; //当有驼峰时,说明递归没有结束,仍需判断 continue; } /** * 若str.charAt(i)不是驼峰的组成部分,则append到后面 */ sb.append(str.charAt(i)); } /** * flag 为flase,说明if (str.charAt(i) == str.charAt(i + 2) && str.charAt(i) != str.charAt(i + 1)) 没有只i系那个,也就是没有驼峰,递归出口,返回 */ if (!flag) { return str; } /** * 上面for循环有i < str.length() - 2;的限制,所以下行代码,处理字符串末尾字符 */ sb.append(str.substring(i)); /** * 尾递归调用 */ return fun(sb.toString()); } }