首页 文章 精选 留言 我的

精选列表

搜索[decode],共1199篇文章
优秀的个人博客,低调大师

LeetCode 394:字符串解码 Decode String

题目: 给定一个经过编码的字符串,返回它解码后的字符串。Given an encoded string, return its decoded string. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。The encoding rule is: k[encoded_string], where the encoded_string inside the square brackets is being repeated exactly k times. Note that k is guaranteed to be a positive integer. 你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。You may assume that the input string is always valid; No extra white spaces, square brackets are well-formed, etc. 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。Furthermore, you may assume that the original data does not contain any digits and that digits are only for those repeat numbers, k. For example, there won't be input like 3a or 2[4]. 示例: s = "3[a]2[bc]", 返回 "aaabcbc". s = "3[a2[c]]", 返回 "accaccacc". s = "2[abc]3[cd]ef", 返回 "abcabccdcdcdef". 解题思路: ​ 这道题类似我们之前做过的一道题:有效的括号: https://mp.weixin.qq.com/s/Sm1S26EgR-dC75hrhVnZGQ 只不过''有效的括号'' [] 内多了一些字符串需要操作。我们同样可以用数据结构栈来解题,,能用栈解决的题目大部分都可以用递归解决,两者逻辑基本相同: 输入:'3[a2[c]]' 初始化栈: 栈nums 存要重复的次数k,栈str 存字符串 遍历字符串: 指针指向字符'3',为数字 num暂存数字3 继续遍历,遇到字符'[' 循环次数num入栈nums,空字符串res入栈str nums: 3 res: '' num置为0,str置空 继续遍历,遇到字符'a',为字母 空字符串res拼接字母'a',res='a' 继续遍历,遇到字符'2',为数字 num暂存数字2 继续遍历遇到字符'[' num入栈nums,res入栈str nums: 3 -> 2 str: '' -> 'a' num置为0,str置空 继续遍历,遇到字符'c',为字母 空字符串res拼接字母'c',res='c' 继续遍历遇到字符']' nums弹出栈顶元素:当前字符串重复次数2 res = res*2 = 'cc' str弹出栈顶元素'a'与res拼接并入栈: res = 'a'+'cc'='acc' str: '' -> 'acc' 继续遍历遇到字符']' nums弹出栈顶元素:当前字符串重复次数3 res = res*3 = 'accaccacc' str弹出栈顶元素空字符串''与res拼接并入栈: res=''+'accaccacc'='accaccacc' str: 'accaccacc' 结束返回res 注意: 由于重复次数可能大于10,所以暂存数字时要适当处理,如 num*10+当前数字 在c++里可以直接修改拼接字符,但Java不支持运算符重载,可以借助 StringBuilder 或 StringBuffer 类。 用栈暂存的逻辑与递归基本一致,可以理解为用递归实现栈。 python没有栈这种数据结构,可以用 list() 数组或双端队列 deque() python可以只用一个栈以元组的形式重复次数和字符串,如(num,res) 利用栈: Java: class Solution { public String decodeString(String s) { //初始化数据结构 Stack<StringBuilder> str = new Stack<>(); Stack<Integer> nums = new Stack<>(); StringBuilder res = new StringBuilder(); int num = 0; for (char c : s.toCharArray()) {//递归字符串 if (c == '[') { str.push(res);//入栈 nums.push(num); num = 0;//刷新num、res res = new StringBuilder(); } else if (c == ']') { StringBuilder tmp = new StringBuilder(); for (int i = nums.pop(); i > 0; i--) tmp.append(res);//res*3 res = str.pop().append(tmp); } else if (c >= '0' && c <= '9') num = num * 10 + (c - '0');//计算重复次数 else res.append(c); } return res.toString(); } } Python: 可直接操作字符串真的很方便。py里有现成的判断字符串的方法: isdigit() 是否为只包含数字的字符串 isalpha() 是否为只包含字母的字符串 class Solution: def decodeString(self, s: str) -> str: #初始化数据结构 stack, res, num = [], '', 0 for c in s: if c.isdigit(): num = num * 10 + int(c) elif c.isalpha(): res += c elif c == '[': #元组形式入栈 stack.append((res, num)) #刷新字符串和重复次数 res, num = '', 0 else: #如果c==']',弹出字符串和重复次数 last_str, this_num = stack.pop() res = last_str + this_num * res return res 利用递归: Java: 将 s.length() 的值以参数传递,减少重复调用 length() 造成的时间损耗 class Solution { private int i = -1;//全局变量i,记录字符数组指针位置 public String decodeString(String s) { return dfs(s.toCharArray(), s.length()).toString(); } //递归函数 private StringBuilder dfs(char[] chars, int len) { int num = 0; StringBuilder str = new StringBuilder(); while (++i < len) { if (chars[i] >= '0' && chars[i] <= '9') num = num * 10 + (chars[i] - '0'); else if (chars[i] == '[') { StringBuilder tmp = dfs(chars, len);//递归调用 while (--num >= 0) str.append(tmp);//重复字符串res=res*num num = 0; } else if (chars[i] == ']') return str; else str.append(chars[i]); } return str; } } Python: class Solution: i = -1 #递归函数,可以直接操作字符串就无需再建一个dfs辅助函数 def decodeString(self, s: str) -> str: res, num = '', 0 while self.i < len(s) - 1: self.i += 1 if s[self.i].isdigit(): num = num * 10 + int(s[self.i]) elif s[self.i].isalpha(): res += s[self.i] elif s[self.i] == '[': #递归调用 res += self.decodeString(s) * num num = 0 elif s[self.i] == ']': return res return res 欢迎关注微.信公.众号:爱写Bug

优秀的个人博客,低调大师

javascript中escape()、unescape()、encodeURI()、encodeURIComponent()、decode...

这些URI方法encodeURI()、encodeURIComponent()、decodeURI()、decodeURIComponent()代替了BOM的escape()和unescape()方法。URI方法更可取,因为他们对所有Unicode编号编码,而BOM方法只能对ASCII编号正确编码。尽量避免使用escape()和unescape()方法。 js对文字进行编码设计三个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 1、传递参数时,需要使用encodeURIComponent,这样组合的url才不会被#等特殊字段截断。 例如: 2、进行url跳转时可以整体使用encodeURI 例如:location.href = encodeURI(http://cang.baidu.com/do/s?word=百度&ct=21); 3、js使用数据时可以使用escape 例如:搜藏中history纪录 4、escape对0-255以外的unicode值进行编码输出%u****格式,其他情况下escape,encodeURI,encodeURIComponent编码结果相同。 最多使用的应为encodeURIComponent,他是将中文、韩文等特殊字符装换成UTF-8格式的urll编码,所以结果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同) escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z unescape 方法 从用 escape 方法编码的 String 对象中返回已解码的字符串。 function unescape(charString : String) : String 参数 charString 必选。要解码的 String 对象或文本。 备注 unescape 方法返回一个包含 charstring 内容的字符串值。所有以 %xx 十六进制形式编码的字符都用 ASCII 字符集当中等效的字符代替。以 %uxxxx 格式(Unicode 字符)编码的字符用十六进制编码 xxxx 的 Unicode 字符代替。注意 unescape 方法不应用于解码“统一资源标识符”(URI)。请改用 decodeURI 和 decodeURIComponent 方法。 decodeURI 方法 返回一个已编码的统一资源标识符 (URI) 的非编码形式。 function decodeURI(URIstring : String) : String 参数 URIstring 必选。表示编码 URI 的字符串。 备注 使用 decodeURI 方法代替已经过时的 unescape 方法。 decodeURI 方法返回一个字符串值。 如果 URIString 无效,将发生 URIError。 decodeURIComponent 方法 返回统一资源标识符 (URI) 的一个已编码组件的非编码形式。 function decodeURIComponent(encodedURIString : String) : String 必选的 encodedURIString 参数是一个表示已编码的 URI 组件的值。 备注 URIComponent 是一个完整的 URI 的一部分

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册