如何在不使用循环的情况下进行检查?

问题描述 投票:-1回答:1

我对此代码不知所措**如何优化代码,以免获得TLE?我绝对必须在主体中使用while循环,其余的可以更改。**

      public static int ostr(String s)
          {
            int cnt=0;
            for (int i = 0; i < s.length(); i++) {
            for (int j = i+1; j <= s.length(); j++) {
                if((s.substring(i,j).length()==1)&&(s.substring(i,j).charAt(0)=='1'))
                {
                    cnt++;
                }
                else if((s.substring(i,j).charAt(0)=='1')&&(s.substring(i,j).charAt(s.substring(i,j).length()-1)=='1'))
                {
                  cnt++;
                }
            }
        }
        return cnt;
          }
java string time-complexity competitive-coding
1个回答
0
投票

首先,请注意,您正在创建许多不必要的字符串,只是为了查看它们的第一个字符或计算其长度。

[s.substring(i,j).charAt(0)s.charAt(i)相同,并且s.substring(i,j).length()j - i相同。

[第二,两个分支都依赖于以i开头的'1'开头的子字符串的第一个字符。这意味着您可以将该测试移出内部循环,并且仅在第一个字符is '1'进入该循环。(当您的子字符串不是以'1'开头时,遍历整个字符串是很浪费的。)

有了这些更改,您最终会得到类似这样的代码(未经测试)

int cnt=0;
for (int i = 0; i < s.length(); i++) {
    if (s.charAt(i) == '1') {
        for (int j = i+1; j < s.length(); j++) {
            if (s.charAt(j) == '1') {
                cnt++;
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.