目录:
题目链接:
来源:力扣(LeetCode)
链接:2810. 故障键盘 - 力扣(LeetCode)
题目要求:
给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。
每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:
0 <= j <= nums[i]
i + j < n
返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。
输入样例:
你的笔记本键盘存在故障,每当你在上面输入字符 'i'
时,它会反转你所写的字符串。而输入其他字符则可以正常工作。
给你一个下标从 0 开始的字符串 s
,请你用故障键盘依次输入每个字符。
返回最终笔记本屏幕上输出的字符串。
示例 1:
输入:s = "string" 输出:"rtsng" 解释: 输入第 1 个字符后,屏幕上的文本是:"s" 。 输入第 2 个字符后,屏幕上的文本是:"st" 。 输入第 3 个字符后,屏幕上的文本是:"str" 。 因为第 4 个字符是 'i' ,屏幕上的文本被反转,变成 "rts" 。 输入第 5 个字符后,屏幕上的文本是:"rtsn" 。 输入第 6 个字符后,屏幕上的文本是: "rtsng" 。 因此,返回 "rtsng" 。
示例 2:
输入:s = "poiinter" 输出:"ponter" 解释: 输入第 1 个字符后,屏幕上的文本是:"p" 。 输入第 2 个字符后,屏幕上的文本是:"po" 。 因为第 3 个字符是 'i' ,屏幕上的文本被反转,变成 "op" 。 因为第 4 个字符是 'i' ,屏幕上的文本被反转,变成 "po" 。 输入第 5 个字符后,屏幕上的文本是:"pon" 。 输入第 6 个字符后,屏幕上的文本是:"pont" 。 输入第 7 个字符后,屏幕上的文本是:"ponte" 。 输入第 8 个字符后,屏幕上的文本是:"ponter" 。 因此,返回 "ponter" 。
学习时间:
2023/8/15
- 星期二早上 7:00
代码:
class Solution {
public String finalString(String s) {
if(!s.contains("i")) {
return s;
}
else {
String[] str = s.split("");
int length = str.length;
String[] strings = new String[length];
for(int i = 0,j = 0;i < str.length;i++) {
String string = str[i];
if(!string.equals("i")){
strings[i-j] = string;
}
else {
length--;
strings = reverse(strings,length,i-j);
j++;
}
}
s = String.join("",strings);
return s;
}
}
public String[] reverse(String[] strings,int length,int i) {
String[] str = new String[length];
for(int j = 0;j < i;j++) {
str[j] = strings[i-1-j];
}
return str;
}
}
整体思路:
- 先把字符串改成数组,然后通过数组里的元素进行判断,是"i"的进行数组反转,否则就不动。
- 本来想用正则表达式,结果失败了(。
- 二刷的时候再补上吧。