如何修复我的java代码中的TLE(超出时间限制)?

发布于 2025-01-10 15:51:22 字数 1409 浏览 0 评论 0原文

我正在尝试在 leetcode 上解决这个问题,并且尝试在笔和纸上运行它,看来我应该得到我的答案。但我的代码在 JAVA 中显示 TLE 有人可以建议我如何摆脱 TLE 并提交我的解决方案吗?为什么显示 TLE?

问题:检查字符串是否可以通过子字符串排序操作进行转换。

链接< /strong>

我的代码:

class Solution {
 
    public boolean isTransformable(String s, String t) {
        int p1 = s.length()-1;
        int p2 = t.length()-1;
        int p3 = s.length()-1;
        
        while(p1>-1){
           
            if(intAt(s,p1)==intAt(t,p2)){
                p1--;
                p2--;
            }else{
                while(intAt(s,p3)!=intAt(t,p2)){
                    p3--;
                    if(p3==0 && intAt(s,p3)!=intAt(t,p2)){
                        return false;
                    }
                }
                swap(s,intAt(s,p1),intAt(s,p3));
            }
        }
        if(s.equals(t)){
            return true;
        }
        return false;
    }
    
    
       
    public int intAt(String s, int index)
    {
        int r = Integer.parseInt(s.substring(index, index+1));
        return r;
    }  

     void swap(String s, int first, int second) {
        int temp = first;
        first  = second;
        second = temp;
    }  
}

I am trying to solve this question on leetcode and I have tried running it on pen and paper and it seems I should get my answer. But my code is showing TLE in JAVA. Can someone suggest me how to get rid of TLE and submit my solution? Why is it showing TLE?

Question: Check if string is transformable with substring sort operations.

Link

My code:

class Solution {
 
    public boolean isTransformable(String s, String t) {
        int p1 = s.length()-1;
        int p2 = t.length()-1;
        int p3 = s.length()-1;
        
        while(p1>-1){
           
            if(intAt(s,p1)==intAt(t,p2)){
                p1--;
                p2--;
            }else{
                while(intAt(s,p3)!=intAt(t,p2)){
                    p3--;
                    if(p3==0 && intAt(s,p3)!=intAt(t,p2)){
                        return false;
                    }
                }
                swap(s,intAt(s,p1),intAt(s,p3));
            }
        }
        if(s.equals(t)){
            return true;
        }
        return false;
    }
    
    
       
    public int intAt(String s, int index)
    {
        int r = Integer.parseInt(s.substring(index, index+1));
        return r;
    }  

     void swap(String s, int first, int second) {
        int temp = first;
        first  = second;
        second = temp;
    }  
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

香草可樂 2025-01-17 15:51:22

我认为你太努力了。您应该只检查是否可以使用字符串 s 中的数字创建字符串 t。 (不需要交换)。

首先,检查两个字符串的长度是否相同。

其次,检查字符串 S 中的每个数字,如果该数字出现在字符串 t 中。如果该数字存在,则从字符串 t 中删除该数字。

  • 无论如何,如果出现 false,您应该返回 false。

第三,当你完成循环 s 时,确保字符串 t 为空。

如果没有发生错误,则应该返回 true;

您的 TLE 错误可能是因为您花费了太长时间进行检查。 (不是java错误)。

I think you are trying too hard. You should just check if it's possible to create string t, using the numbers from string s. (Swapping is not needed).

First, check if both string have the same length.

Second, check for each number in string S if, this number is present in string t. Remove this number if present from string t.

  • If by any case false comes up, you should return false.

Third, make sure string t is empty when you are done looping though s.

If no errors occurred, you should return true;

You TLE errors is probably there because you are taking too long to do the check. (not a java error).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文