• 2. 替换空格


     题目:

    思路:

    1. 申请一个较大的缓存依次缓存源字符串中非空格元素,遇到空格就替换 然后将缓存中的字符串考回原数组,进行输出

    2. 将空格替换成%20时,每个空格变成了3个字符,整个字符串的长度就会改变。len = len + 2*空格。

    方法:

    1. 从前往后替换(O(n^2),每遇空格,整个串都要移动一次)

    2. 从后往前替换 (O(n), 这种方法更优一点)。推荐

    3. 利用java自带的replace覆盖原字符串(也复杂) 

    方法2:

    class Solution {
    public:
    void replaceSpace(char *str,int length) {
            //遍历一边字符串找出空格的数量
            if(str==NULL||length<0)
                return ;
            int i=0;
            int oldnumber=0;//记录以前的长度
            int replacenumber=0;//记录空格的数量
            while(str[i]!='')
                {
                   oldnumber++;
                   if(str[i]==' ')
                       {
                         replacenumber++;
                       }
                      i++; 
                }
            int newlength=oldnumber+replacenumber*2;//插入后的长度
            if(newlength>length)//如果计算后的长度大于总长度就无法插入
                return ;
            int pOldlength=oldnumber; //注意不要减一因为隐藏个‘’也要算里
            int pNewlength=newlength;
            while(pOldlength>=0&&pNewlength>pOldlength)//放字符
                {
                  if(str[pOldlength]==' ') //碰到空格就替换
                      {
                         str[pNewlength--]='0';
                         str[pNewlength--]='2';
                         str[pNewlength--]='%';
                         
                      }
                   else //不是空格就把pOldlength指向的字符装入pNewlength指向的位置
                   {
                        str[pNewlength--]=str[pOldlength];
                       
                   }
                 pOldlength--; //不管是if还是elsr都要把pOldlength前移
                 
               }
            
    
    }
    };

    方法3:

    public class Solution {
        public String replaceSpace(StringBuffer str) {
            String s = new String(str); //toString方法操作的是对象,所以需要使用包装类。
            return s.toString().replaceAll(" ", "%20");
        }
    }
  • 相关阅读:
    分布式框架服务调用超时设计与实现
    分布式框架灰度发布实现
    写给自己的 SOA 和 RPC 理解
    Java 基础【19】代理
    Java 基础【18】 反射与内省
    Spring HttpInvoker 从实战到源码追溯
    Lombok 使用攻略
    Guava Preconditions 工具参数前置校验
    CAS 单点登录【2】自定义用户验证
    Hibernate 离线对象构建通用查询
  • 原文地址:https://www.cnblogs.com/msymm/p/9929896.html
Copyright © 2020-2023  润新知