zoukankan      html  css  js  c++  java
  • [Swift]LeetCode848. 字母移位 | Shifting Letters

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址: https://www.cnblogs.com/strengthen/p/10591854.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    We have a string S of lowercase letters, and an integer array shifts.

    Call the shift of a letter, the next letter in the alphabet, (wrapping around so that 'z' becomes 'a'). 

    For example, shift('a') = 'b'shift('t') = 'u', and shift('z') = 'a'.

    Now for each shifts[i] = x, we want to shift the first i+1 letters of Sx times.

    Return the final string after all such shifts to S are applied.

    Example 1:

    Input: S = "abc", shifts = [3,5,9]
    Output: "rpl"
    Explanation: 
    We start with "abc".
    After shifting the first 1 letters of S by 3, we have "dbc".
    After shifting the first 2 letters of S by 5, we have "igc".
    After shifting the first 3 letters of S by 9, we have "rpl", the answer.
    

    Note:

    1. 1 <= S.length = shifts.length <= 20000
    2. 0 <= shifts[i] <= 10 ^ 9

    有一个由小写字母组成的字符串 S,和一个整数数组 shifts

    我们将字母表中的下一个字母称为原字母的 移位(由于字母表是环绕的, 'z' 将会变成 'a')。

    例如·,shift('a') = 'b', shift('t') = 'u',, 以及 shift('z') = 'a'

    对于每个 shifts[i] = x , 我们会将 S 中的前 i+1 个字母移位 x 次。

    返回将所有这些移位都应用到 S 后最终得到的字符串。

    示例:

    输入:S = "abc", shifts = [3,5,9]
    输出:"rpl"
    解释: 
    我们以 "abc" 开始。
    将 S 中的第 1 个字母移位 3 次后,我们得到 "dbc"。
    再将 S 中的前 2 个字母移位 5 次后,我们得到 "igc"。
    最后将 S 中的这 3 个字母移位 9 次后,我们得到答案 "rpl"。
    

    提示:

    1. 1 <= S.length = shifts.length <= 20000
    2. 0 <= shifts[i] <= 10 ^ 9

    Runtime: 340 ms
    Memory Usage: 21 MB
     1 class Solution {
     2     func shiftingLetters(_ S: String, _ shifts: [Int]) -> String {
     3         var arrS = Array(S)
     4         var i:Int = shifts.count - 1
     5         var m:Int = 0
     6         while(i >= 0)
     7         {
     8             m += shifts[i]
     9             arrS[i] = (((arrS[i].ascii - 97) + m) % 26 + 97).ASCII   
    10             i -= 1
    11             m %= 26            
    12         }
    13         return String(arrS)
    14     }
    15 }
    16 
    17 //Character扩展 
    18 extension Character  
    19 {  
    20   //Character转ASCII整数值(定义小写为整数值)
    21    var ascii: Int {
    22        get {
    23            return Int(self.unicodeScalars.first?.value ?? 0)
    24        }       
    25     }
    26 }
    27 
    28 //Int扩展
    29 extension Int
    30 {
    31     //Int转Character,ASCII值(定义大写为字符值)
    32     var ASCII:Character 
    33     {
    34         get {return Character(UnicodeScalar(self)!)}
    35     }
    36 }

    652ms

     1 class Solution {
     2     func shiftingLetters(_ S: String, _ shifts: [Int]) -> String {
     3     var number:UInt32 = 0
     4         var i = 0;
     5         var count = 0 ;
     6         var string : String = ""
     7         let startCount :UInt32 = 97
     8         
     9         var newShifts :[Int] = []  //换算出一个新的数组
    10         var allCount = 0  //算出总数
    11         for val in shifts{
    12             let newval = val%26
    13             newShifts .append(newval)
    14             allCount += newval
    15         }
    16         for code in S.unicodeScalars {
    17             number = code.value - startCount
    18             
    19             number = (number +  UInt32(allCount))%26
    20             var ch:Character = Character(UnicodeScalar(number+startCount)!)
    21             string.append(ch);
    22             
    23             if(i < newShifts.count)
    24             {
    25                 allCount -= newShifts[i]
    26             }
    27             else{
    28                 allCount = 0
    29             }
    30             i += 1
    31         }
    32         return string
    33     }
    34 }

    1568ms

     1 class Solution {
     2         func shiftingLetters(_ S: String, _ shifts: [Int]) -> String {
     3         
     4         func move(s:String,steps:[Int]) -> String{
     5             let lastChar = Int("z".unicodeScalars.first!.value)
     6             let firstChar = Int("a".unicodeScalars.first!.value)
     7             let lenth = lastChar - firstChar + 1
     8             let chars = zip(s,steps).map { (arg) -> Character in
     9                 print(arg.0,arg.0.unicodeScalars.first!.value)
    10                 let value = ((Int(arg.0.unicodeScalars.first!.value) - firstChar) + arg.1)%lenth + firstChar
    11                 
    12                 return Character.init(Unicode.Scalar.init(value)!)
    13                 
    14                 
    15                 
    16             }
    17             return String.init(chars)
    18         }
    19         
    20         var steps:[Int] = []
    21        
    22         var lastInt = 0
    23         for i in stride(from: shifts.count-1, through: 0, by: -1) {
    24             lastInt += shifts[i]
    25             steps.append(lastInt)
    26         }
    27         return move(s:S ,steps:steps.reversed())
    28     }
    29 }
  • 相关阅读:
    PHP断点续传(下载)代码
    PHP及相关服务器防盗链
    工作过程中注意事项(一)
    ubuntu下libtorrent库安装
    ubuntu ftp 服务器搭建
    ubuntu系统搭建php+apache+cumulusclips
    JavaScript HTML DOM 元素(节点)
    JavaScript 闭包
    安装安卓(Android)x86系统
    javascript 错误与调试
  • 原文地址:https://www.cnblogs.com/strengthen/p/10591854.html
Copyright © 2011-2022 走看看