LeetCode 2810.故障键盘

目录:

题目链接:

题目要求:

输入样例:

学习时间:

代码:

整体思路:


题目链接:

来源:力扣(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"的进行数组反转,否则就不动。
  • 本来想用正则表达式,结果失败了(。
  • 二刷的时候再补上吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值