一面算法: 有一串类似右面的字符串,在字符串基础上调整,使*全部位于末尾,其他字符保持原来前后顺序,不能开辟新的空间,效率要高,String str=“dhdh*cbcb*xhx***dhdh*”。 思考半分钟, “java中字符串是不可变的啊!” “不可变?” “是啊,不能修改” “那你就当成stringbuilder” 无语。。。半分钟后,写了个时间复杂度n方级别的算法。。。 “两重循环啊” “在原来基础上操作只能这样了”
package com.test; public class Copy_2_of_TT { public static void main(String[] args) throws Exception { int testCount = 0; while (testCount++ < 100) { //随机构造待移动字符串 int len = (int) (Math.random() * 50 + 80); StringBuilder sb = new StringBuilder(); for (int i = 0; i < len; i++) { char ch = (char) (Math.random() > 0.6 ? 'a' + i / 5 : '*'); sb.append(ch); } System.out.println(sb.toString()); // char[] chs = sb.toString().toCharArray(); //开始移动 依次检查每一个字符 for (int i = 0; i < chs.length; i++) { char c = chs[i]; if (c == '*') {//若当前字符是* for (int j = i + 1; j < chs.length; j++) {//从待检查位置下一个位置起,找第一个不是*的字符 if (chs[j] != '*') { char t = chs[i];//找到后交换 chs[i] = chs[j]; chs[j] = t; break; } } //当然这里可以特殊处理一下,判断j是否等于chs.length,若相等,表示从待检查位置起,后面的全是*,所以没必要继续检查了,直接break出外层循环就可以了 } } for (int i = 0; i < chs.length; i++) { System.out.print(chs[i]); } System.out.println("\n\n"); } } }
面试总结 面试时还问了些其他东西,没想到问的这么水,随便一个有点项目经验的就可以,让我推荐同学中做web的,有基础就行。。。华为怎么能要求这么低,蘑菇街面试时问的都是些很深入的问题,和安卓紧密相关的,华为怎么能。。。。。 [END]
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/qingchunweiliang/article/details/48022459