我对此代码不知所措**如何优化代码,以免获得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;
}
首先,请注意,您正在创建许多不必要的字符串,只是为了查看它们的第一个字符或计算其长度。
[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++;
}
}
}
}