今天的每日一题,标着简单标签,但是感觉并不简单啊,花了差不多1个多小时,快俩小时,交更新六遍代码,,虽然用一个for写出来,但时间复杂度还是N*N,但是改代码过程中有所思考,相比以前有所长进,有收获,有进步。
O(N*N)
int ans =0;
List<String> list =new ArrayList<>();
for(int i = 0;i<s.length();i++){
for(int j = i;j<s.length();j++){
list.add(s.substring(i,j+1));
}
}
System.err.println(list);
for (int i = 0; i < list.size(); i++) {
int ones = 0;
int zeros = 0;
char[] chars = list.get(i).toCharArray();
for (int j = 0; j < chars.length; j++) {
if(chars[j] == '1') ones++;
else if (chars[j] == '0') zeros++;
if(ones >k && zeros>k){ ans++;break;}
}
}
return list.size() -ans;
class Solution {
public int countKConstraintSubstrings(String s, int k) {
int ans = 0;
int sum = 0;
for (int i = 0; i < s.length(); i++) {
sum += i + 1;
for (int j = i; j < s.length(); j++) {
int ones = 0;
int zeros = 0;
char[] chars = s.substring(i, j + 1).toCharArray();
for (int n = 0; n < chars.length; n++) {
if (chars[n] == '1')
ones++;
else if (chars[n] == '0')
zeros++;
if (ones > k && zeros > k) {
ans++;
break;
}
}
}
}
return sum - ans;
}
}
for (int i = 0; i < s.length(); i++) {
sum += i + 1;
int ones = 0;
int zeros = 0;
/*和上边代码不同的是,没注意到char[] chars = s.substring(i, s.length()).toCharArray(); 这个函数耗时多,但是每次for都会执行,这次移到了外边从21ms-->4ms*/
char[] chars = s.substring(i, s.length()).toCharArray();
for (int n = 0; n < chars.length; n++) {
if (chars[n] == '1')
ones++;
else if (chars[n] == '0')
zeros++;
if (ones > k && zeros > k) {
ans+=chars.length-n;
break;
}
}
}
char[] chars=s.toCharArray();//更进一步直接在搞到外边,但是这时候 4--》2 ms
for (int i = 0; i < s.length(); i++) {
sum += i + 1;
int ones = 0;
int zeros = 0;
for (int n = i; n < s.length(); n++) {
if (chars[n] == '1')
ones++;
else if (chars[n] == '0')
zeros++;
if (ones > k && zeros > k) {
ans+=s.length()-n;
break;
}
}
}
最后一舞,搞了好长时间,也算有点收获,没白琢磨
int ans = 0;
int sum = 0;
char[] chars = s.toCharArray();
int ones = 0;
int zeros = 0;
for(int i = 1;i<=s.length();i++) sum+=i;
for (int i = 0, r = i; i < s.length() && r < s.length();) {
if (chars[r] == '1')
ones++;
else if (chars[r] == '0')
zeros++;
if (ones > k && zeros > k) {
ones = 0;
zeros = 0;
ans += s.length() - r;
i++;
r = i;
continue;
}
if (r + 1 == s.length()) {
i++;
r = i;
ones = 0;
zeros = 0;
continue;
}
r++;
}
return sum - ans;