zoukankan      html  css  js  c++  java
  • 443. 压缩字符串

    给定一组字符,使用原地算法将其压缩。
    压缩后的长度必须始终小于或等于原数组长度。
    数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。
    在完成原地修改输入数组后,返回数组的新长度。

    示例 1:
    输入:["a","a","b","b","c","c","c"]
    输出:返回6,输入数组的前6个字符应该是:["a","2","b","2","c","3"]
    说明:
    "aa"被"a2"替代。"bb"被"b2"替代。"ccc"被"c3"替代。


    思路:
    遍历list:
    如果下一个元素和当前元素一样,ans不变,计数器加一;
    如果下一个元素和当前元素不一样,将ans和计数器转型后拼接到结果串后面;
    然后 ans重置,计数器重置;
    
    
      1 class Solution(object):
      2     def compress3(self, chars):
      3         # 设定记录元素的指针 和 写指针
      4         anchor = write = 0
      5         # 遍历原list
      6         for read, c in enumerate(chars):
      7             # 如果读到了原list末尾,或者当前字符与后一个字符不同,说明读到了相同字符的末尾
      8             if read + 1 == len(chars) or chars[read + 1] != c:
      9                 # 将记录的元素写到新list中
     10                 chars[write] = chars[anchor]
     11                 # 写指针后移
     12                 write += 1
     13                 # 如果读指针比记录指针走得远
     14                 if read > anchor:
     15                     # 将计数器字符化并拼接到新list后
     16                     for digit in str(read - anchor + 1):
     17                         chars[write] = digit
     18                         write += 1
     19                 # 记录指针赋新值
     20                 anchor = read + 1
     21         res = [0]*write
     22         for k in range(write):
     23             if k<write:
     24                 res[k] = chars[k]
     25         print(res)
     26         # 返回写指针的位置,即是新list的长度
     27         return write
     28 
     29     def compress2(self, chars):
     30         """
     31         :type chars: List[str]
     32         :rtype: int
     33         """
     34         # 写指针
     35         ans = 0
     36         # 记录指针
     37         index = 0
     38         # 遍历原list
     39         for i, ch in enumerate(chars):
     40             # 要是遍历到了list的最后或者当前字符与下一个字符不同,则相同字符读取结束
     41             if i == len(chars) - 1 or chars[i + 1] != ch:
     42                 # 将记录指针指向的元素赋给新list
     43                 chars[ans] = chars[index]
     44                 # 写指针后移
     45                 ans += 1
     46                 # 要是读指针走在记录指针的前面
     47                 if i > index:
     48                     # 计算相同字符的长度
     49                     length = i - index + 1
     50                     for j in str(length):
     51                         chars[ans] = j
     52                         ans += 1
     53                 index = i + 1
     54         result = [0] * ans
     55         for k in range(ans):
     56             if k < ans:
     57                 result[k] = chars[k]
     58         print(result)
     59         return ans
     60 
     61     """
     62     将整数index按位拼接到集合后面
     63     """
     64 
     65     def intToList(self, result, index):
     66         """
     67         :type result: List[str]
     68         :type index: int
     69         :rtype: List[str]
     70         """
     71         temp = str(index)
     72         for i in range(len(temp)):
     73             result.append(temp[i])
     74         return result
     75 
     76     def compress(self, chars):
     77         """
     78         :type chars: List[str]
     79         :rtype: int
     80         """
     81         print("集合的长度:", len(chars))
     82         # 计数器初始化
     83         index = 1
     84         # 结果list的长度
     85         listLen = 1
     86         for i in range(1, len(chars)):
     87             # print(chars[i])
     88             if chars[i] == chars[i - 1]:
     89                 index += 1
     90             elif chars[i] != chars[i - 1]:
     91                 chars[listLen] = str(index)
     92                 listLen += 1
     93                 chars[listLen] = chars[i]
     94                 listLen += 1
     95                 index = 1
     96         print(chars)
     97         return listLen
     98 
     99 
    100 if __name__ == '__main__':
    101     solution = Solution()
    102     print(solution.compress2(["a"]))
    103     print(solution.compress2(["a", "a", "b", "b", "c", "c", "c"]))
    104     print(solution.compress2(["a", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b"]))
    
    
    
     
  • 相关阅读:
    关于粒子发射(CAEmitterLayer)
    自定义cell(xib)中button点击事件不能响应的情况
    xcode意外退出
    iOS开发技巧-2
    禁止UIWebView随键盘的弹起而往上滚动
    内联函数
    使用sudo apt-get出现无法解析域名的问题:“cn.archive.ubuntu.com”
    iOS进阶
    swift 中的defer
    iOS中static的作用
  • 原文地址:https://www.cnblogs.com/panweiwei/p/12682176.html
Copyright © 2011-2022 走看看