admin管理员组

文章数量:1516870

路径加密(替换空格),剑指offer,力扣

目录

我们直接看题解吧:

方法: 

审题目+事例+提示:

解题思路:

法1:

 代码(法1):

法2:

代码(法2):


原题解:

【剑指Offer】2、替换空格 

   力扣题解:

         LCR 122. 路径加密 - 力扣(LeetCode)

今天刷路径加密(替换空格),大家有兴趣可以点上看看题目要求,试着做一下

我们直接看题解吧:

由于力扣题目与原题有点差异,力扣传入的是String,而原题这边传的是StringBuffer,所以这边以原题为主

方法: 

第一个方法,创建新字符串

(剑指offer)第二个方法,原地更改

审题目+事例+提示:

原题中时将空格“ ”改为%20,这意味着每次需要增加两位

解题思路:

法1:

循环,遇到‘.’(空格)就加空格“ ”(%20),否则就其他加字符。

 代码(法1):

力扣:

class Solution:def pathEncryption(self, path: str) -> str:res = []for c in path:if c == '.': res.append(' ')else: res.append(c)return "".join(res)

 原题:

   public String replaceSpace(StringBuffer str) {String res="";for(int i=0;i<str.length();i++){char c=str.charAt(i);if(c==' ')res += "%20";elseres += c;}return res;}

优化1(利用三目运算):

class Solution {
public:string replaceSpace(string s) {string str;for(int i = 0;i<s.size();i++){s[i]==' '?str+="%20":str+=s[i];}return str;}
};

优化2(利用replace()方法):

class Solution {public String replaceSpace(String s) {return s.replaceAll(" ","%20");}
}
法2:
  1. 判断数组是否为空,是则返回null
  2. 循环统计一下空格数量
  3. 设置数组新长度,双指针,oldindex指向原数组末尾,newindex指向原数组+2*空数量
  4. 循环:

         ·若遇到空格,oldindex--,依次newindex--,填入%,2,0

       ·否则,将其他字符元素放入new指向的位置,之后old与new 递减

    5.最后返回字符串

代码(法2):
   public String replaceSpace(StringBuffer str) {if(str==null)return null;int numOfblank = 0;//空格数量int len=str.length();for(int i=0;i<len;i++){  //计算空格数量if(str.charAt(i)==' ')numOfblank++;}str.setLength(len+2*numOfblank); //设置长度int oldIndex=len-1;  //两个指针int newIndex=(len+2*numOfblank)-1;while(oldIndex>=0 && newIndex>oldIndex){char c=str.charAt(oldIndex);if(c==' '){oldIndex--;str.setCharAt(newIndex--,'0');str.setCharAt(newIndex--,'2');str.setCharAt(newIndex--,'%');}else{str.setCharAt(newIndex,c);oldIndex--;newIndex--;}}return str.toString();}

注:使用 了setLength()、setCharAt()方法

本文标签: 路径加密(替换空格),剑指offer力扣