Leetcode(884)-索引处的解码字符串
给定一个编码字符串 S
。为了找出解码字符串并将其写入磁带,从编码字符串中每次读取一个字符
,并采取以下步骤:
- 如果所读的字符是字母,则将该字母写在磁带上。
- 如果所读的字符是数字(例如
d
),则整个当前磁带总共会被重复写d-1
次。
现在,对于给定的编码字符串 S
和索引 K
,查找并返回解码字符串中的第 K
个字母。
示例 1:
输入:S = "leet2code3", K = 10
输出:"o"
解释:
解码后的字符串为 "leetleetcodeleetleetcodeleetleetcode"。
字符串中的第 10 个字母是 "o"。
示例 2:
输入:S = "ha22", K = 5
输出:"h"
解释:
解码后的字符串为 "hahahaha"。第 5 个字母是 "h"。
示例 3:
输入:S = "a2345678999999999999999", K = 1
输出:"a"
解释:
解码后的字符串为 "a" 重复 8301530446056247680 次。第 1 个字母是 "a"。
提示:
2 <= S.length <= 100
S
只包含小写字母与数字2
到9
。S
以字母开头。1 <= K <= 10^9
- 解码后的字符串保证少于
2^63
个字母。
思路:一开始的思路,是遍历字符串,如果是字母,就加到另外一个字符串上,如果是数字,就重复n-1次,当个数大于K时,就返回第K个字符,但是这种做法超时。这也应该是为什么难度是中等的原因吧。
上述的做法,还是要一个个遍历一个个的加字符,复杂度可想而知,无法满足题目的要求。
所以我们只能从下标考虑,就是我只记录我的索引,不涉及真正的字符串的空间,因为字符的操作是有规律的,只要找到其中的规律,我们就可以只通过索引来确定最终字符串的某个字符。
首先我们也是要一个个遍历,如果是字母,就将索引+1,如果碰到数字,就将这个索引乘以这个数字,当然同时要判断,索引与K的关系。如果索引小于K,就一直遍历下去,如果大于等于K,那么就不用了,这个时候我们可以找到第K个元素了。
这个时候要将索引往回退,如果是数字,就要除以这个数字,变成单倍数的字符串,相应的,第K个也要变成单倍数的
string decodeAtIndex(string S, int K)
{
long cur=0;
int i;
for(i=0;cur<K;++i)
{
if(isdigit(S[i]))
cur=cur*(S[i]-'0');
else
cur++;
}
while(i--)
{
if(isdigit(S[i]))
{
cur=cur/(S[i]-'0');
K=K%cur;
}
else if(K%(cur--)==0)
{
return string(1,S[i]);
}
}
}
Leetcode(884)-索引处的解码字符串的更多相关文章
- [Swift]LeetCode880. 索引处的解码字符串 | Decoded String at Index
An encoded string S is given. To find and write the decodedstring to a tape, the encoded string is ...
- js-DOM ~ 05. Date日期的相关操作、string、查字符串的位置、给索引查字符、字符串截取slice/substr/substring、去除空格、替换、大小写、Math函数、事件绑定、this
内置对象: 语言自带的对象/提供了常用的.基本的功能 打印数组和字符串不用for... in / 打印josn的时候采用for...in Date 获取当前事件: var date = ...
- 如何在JS数组特定索引处指定位置插入元素?
如何在JS数组特定索引处指定位置插入元素? 需求: 将一个元素插入到现有数组的特定索引处.听起来很容易和常见,但需要一点时间来研究它. // 原来的数组var array = ["one&q ...
- LeetCode初级算法的Python实现--字符串
LeetCode初级算法的Python实现--字符串 # 反转字符串 def reverseString(s): return s[::-1] # 颠倒数字 def reverse(x): if x ...
- LeetCode:比较含退格字符串【844】
LeetCode:比较含退格字符串[844] 题目描述 给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果. # 代表退格字符. 示例 1: 输入:S = ...
- python 6:list.append(新元素)与list.insert(索引,新元素)(在列表末尾追加新元素、在索引处添加新元素)
bicycles = ['trek', 'cannondale', 'redline', 'specialized'] print(bicycles) bicycles.append("ho ...
- Leetcode 344:Reverse String 反转字符串(python、java)
Leetcode 344:Reverse String 反转字符串 公众号:爱写bug Write a function that reverses a string. The input strin ...
- Lua Table pairs输出顺序问题 (版本差异 解决数字索引间断并兼容字符串索引)
问题标签: Lua Table 迭代器;Lua Table 输出顺序; Lua Table 顺序输出;Lua Table 数字索引 字符串索引;Lua Table pairs; 问题背景: 使用pai ...
- [LeetCode] 880. Decoded String at Index 在位置坐标处解码字符串
An encoded string S is given. To find and write the decoded string to a tape, the encoded string is ...
随机推荐
- Git安装/VScode+Git+Github
Git安装/VScode+Git+Github 1. 相关简介 git 版本控制工具,支持该工具的网站有Github.BitBucket.Gitorious.国内的OS China仓库.Csdn仓库等 ...
- 微信登录4-开发回调URL
一.准备 1.引入pom依赖 在要使用HttpClient的项目中加入依赖 <!--httpclient--> <dependency> <groupId>org. ...
- 解决Ajax同源政策的方法【JSONP + CORS + 服务器端解决方案】
解决Ajax同源政策的方法 使用JSONP解决同源限制问题 jsonp是json with padding的缩写,它不属于Ajax请求,但它可以模以Ajax请求.\ 步骤 1.将不同源的服务器端请求地 ...
- 图解ARP协议
前置知识:MAC地址 在说到ARP协议之前,需要了解MAC地址,在OSI七层模型中,第三层是网络层,要解决的是下一跳机制确定的设备位置,具体来说就是网卡地址,MAC地址用于在网络中唯一标示一个网卡,一 ...
- 在Golang中如何正确地使用database/sql包访问数据库
本文记录了我在实际工作中关于数据库操作上一些小经验,也是新手入门golang时我认为一定会碰到问题,没有什么高大上的东西,所以希望能抛砖引玉,也算是对这个问题的一次总结. 其实我也是一个新手,机缘巧合 ...
- SRE SLO On-Call 流程机制 系统稳定性
开篇词|SRE是解决系统稳定性问题的灵丹妙药吗? https://time.geekbang.org/column/article/212686 这两年,近距离地接触了很多不同类型.不同规模的企业 I ...
- Python学习【第3篇】:列表魔法
##########################深灰魔法-list类中提供的方法###################list 类,列表list = [1,12,9,"age" ...
- flutter环境部署
一,xcode开发环境配置问题记录 1,Signing for "Runner" requires a development team xcode需要配置AppleID: 1,X ...
- JDBC连接数据库,数据库访问层
为什么需要JDBC JDBC API DriverManager JDBC驱动 JDBC的功能 JDBC步骤 数据访问层DAO DAO模式的组成 DAO模式的实际应用 为什么需要JDBC? JDBC是 ...
- 免费开源的代码审计工具 Gosec 入门使用
声明: 本教程是在自己的电脑上本地测试Gosec的效果,所以不涉及其他运行模式,如果想要了解其他模式可以关注后期文档,如果想要自定义交流自定义代码扫描规则,可以跟我交流沟通. 背景: Gosec是一个 ...