字符数组的长度难道在其他语言是可变的?如果是那就不是数组了,而是封装了自动扩容的数组类或列表等。
就算在C中这种方法也要首先扩展原字符数组,而且有一条原则是最好不要修改传给函数的参数,那么一般还是会重新创建一个数组再进行操作。
所以重新创建一个数组没问题啊。。
没看过这个剑指offer不清楚这题它所谓的精髓在哪。。但是你那样确实还是O(n)。

解决方案 »

  1.   


    public class ReplaceMethodTest {    public static void main(final String[] args) {
            String string = "We Are Happy";
            System.out.println(replaceMethod(string));
        }    public static String replaceMethod(final String inputString) {
            return inputString.replace(" ", "%20");
        }
    }
    We%20Are%20Happy是说用Java如何实现replace方法吗?还是仅仅如何使用replace方法?
      

  2.   


    public static void main(final String[] args) {
            String string = "We Are Happy";
            System.out.println(replaceString(string));
        }
     
        public static String replaceString(final String inputString) {
            return inputString.replace(" ", "%20");
        }
      

  3.   

    面试题是绝对不允许直接调用replace、sort、reverse之类的方法的,因为面试官是考的算法,并不是考你对api的熟悉程度。
      

  4.   

    编程之美、剑指offer等等,都不适合用Java做,建议用C/C++。
    因为你的对手都是对指针了如指掌的大神;如果你用C/C++写,可能写的不会完全对,但面试官会看你的思路、设计思想,代表你还有翻盘的机会。
    但如果用Java、python、JavaScript等等语言来处理指针的话,明摆着是将Offer拱手相让!
      

  5.   

    String str ="We Are Happy";
    System.out.println(str.replaceAll(" ","%20"));用java写不就是两行代码吗?没明白楼主要表达什么意思?
      

  6.   

    看看这个类的源代码,可能对你有帮助,只是可能哈  java.net.URLEncoder.encode
      

  7.   

    你搞错了!Java中String是不变的,所以你每次替换一个空格,都是实际上新建了一个字符串,并丢弃原来的字符串,而不是一定字符的问题了!!!其实始不用这样的,Java中有可变长度字符串StringBuffer、StringBuilder
    你实际只需要把字符串读一遍,然后根据每个char的值等不等于'='来判断给可变长度字符串中添加什么内容public class Test {

    public static void main(String[] args) throws Exception {
     String s = "We Are Happy";
     System.out.println(replaceMethod(s));
    }

    private static String replaceMethod(String s) {
    StringBuffer buffer=new StringBuffer();
    if(s!=null){
    for(int i=0;i<s.length();i++){
    char ch=s.charAt(i);
    if(ch==' '){
    buffer.append("%20");
    }else{
    buffer.append(ch);
    }
    }
    }
    return buffer.toString();
    }

    }
      

  8.   

    其实我的本意就是觉得剑指offer的题不适合用java做,因为好多算法题涉及到指针,而且java对很多算法都已经实现了封装,所以这就是当初我刚开始看剑指offer想用java做但是感觉怪怪的原因,谢谢大家的讨论。