美文网首页
《剑指offer》 04.替换空格

《剑指offer》 04.替换空格

作者: 切一斤桃花卖酒钱 | 来源:发表于2018-05-20 15:05 被阅读13次

=> 所有题目列表

请实现一个函数,将一个字符串中的空格替换成“%20”。

/** Swift 
 * 问题:请实现一个函数,将一个字符串中的空格替换成“%20”。
 * 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy
 *
 * 思路:方法一: 使用系统的替换方法,需要系统库 Foundation
 *      方法二: 遍历字符串的每一个字符,然后放入一个新的字符串中。这样做开辟了新的内存空间
 *      方法三: C 语言没有特定的字符串类型,str[],所以可以通过往原先数组中替换插入的方式。Swift 中,虽然 String
 *             也是字符串的集合,但是作为对象不能直接修改其内部元素,所以此处仅作为演示,重在思想。
 *
 */



// 方法一
import Foundation
func replaceBlankWithSystemFunction(in aString: String) -> String {
    let aChar: String = "%20"

     // associated Foundation
    return aString.replacingOccurrences(of: " ", with: aChar, options: .literal, range: nil)

}

// 方法二
func replaceBlankWithANewString(in aString: String) -> String {
  let aChar: String = "%20"
  var newString = ""
  
  for i in aString.enumerated() {
    if i.element == " " {
      newString.append(String(aChar))
    } else {
      newString.append(String(i.element))
    }
  }
  return newString
}

// 方法三
func replaceBlank(in aString: String, length: Int) -> String {
    
    var blankCount = 0  // 空格数量
    for char in aString.enumerated() {
        if char.element == " " {
            blankCount += 1
        }
    }
    
    if blankCount == 0 { return aString } // 无空格直接返回原数据
    
    let targetLength = aString.count + 2 * blankCount  // 转化后长度增长 空格*2
    
    var l = length - 1  // 原始最后下标
    var t = targetLength - 1  // 目标最后下标
  var chars = Array<Character>(repeating: "_", count: targetLength)  // 新建一个大小为 targeLength 大小的字符数组, PS: C 语言不需要新建,可以直接操作字符数组
  
  var moveCount: Int = 0
    while l >= 0 {  // 遍历 l,依次填充数据大小为 t 的数组
        let start = aString.index(aString.startIndex, offsetBy: l)
        let end = aString.index(aString.startIndex, offsetBy: l + 1)
        let char = Character(String(aString[start..<end]))  // 取到字符

        if char == " " {  // 检查每个原始数据位置是否为空
            chars[t-2...t] = ["%", "2","0"]
            t -= 2
        } else {  // 否则移动字符。从前往后插入每插入一次都要移动之后的所有字符, O(log n),而从后往前插入,以为已经知道了目标数组大小,所以只需要移动当前字符即可 O(n)。
            chars[t] = char
            moveCount += 1
        }
        
        l -= 1
        t -= 1
    }
    
    debugPrint(moveCount)
    return String(chars)
}


// MARK: - Test

let aString = "I Love You"
let a = replaceBlank(in: aString, length: aString.count)

github 请查看这里

相关文章

  • 《剑指offer》 04.替换空格

    => 所有题目列表 请实现一个函数,将一个字符串中的空格替换成“%20”。 github 请查看这里

  • [剑指offer] 替换空格

    本文首发于我的个人博客:尾尾部落 题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符...

  • 剑指offer - 替换空格

    题目 请实现一个函数,把字符串中的每个空格都换成%20。例如:输入"We are happy",则输出“We%20...

  • 《剑指offer》替换空格

    问题: 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换...

  • 剑指offer:替换空格

    题目分析 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替...

  • 剑指offer 替换空格

    题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替...

  • [剑指Offer]替换空格

    本文首发于我的个人博客Suixin’s Blog原文: https://suixinblog.cn/2019/02...

  • 【剑指offer】- 替换空格

    1、题目描述 请实现一个函数,把字符串中的每个空格替换成"%20"。 你可以假定输入字符串的长度最大是1000。注...

  • 剑指 offer ---替换空格

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经...

  • 剑指Offer 练习

    剑指Offer 算法练习 03.数组中重复的数字 04.二维数组的查找 05.替换空格 06.从尾到头打印链表 0...

网友评论

      本文标题:《剑指offer》 04.替换空格

      本文链接:https://www.haomeiwen.com/subject/dkktjftx.html