Input: s ="abcdefg", pattern ="bcdffg"Output: 1Explanation:
The substring `s[1..6] == "bcdefg"` can be converted to `"bcdffg"` by changing
`s[4]` to `"f"`.
Input: s ="ababbababa", pattern ="bacaba"Output: 4Explanation:
The substring `s[4..9] == "bababa"` can be converted to `"bacaba"` by changing
`s[6]` to `"c"`.
We want to find the smallest index where a substring of s is almost equal to pattern, i.e., differs in at most one character. We can use a sliding window of length len(pattern) and count mismatches for each window.
classSolution {
public:int findAlmostEqualSubstring(string s, string pattern) {
int n = s.size(), m = pattern.size();
for (int i =0; i + m <= n; ++i) {
int diff =0;
for (int j =0; j < m; ++j) {
if (s[i + j] != pattern[j]) diff++;
if (diff >1) break;
}
if (diff <=1) return i;
}
return-1;
}
};
classSolution {
publicintfindAlmostEqualSubstring(String s, String pattern) {
int n = s.length(), m = pattern.length();
for (int i = 0; i + m <= n; ++i) {
int diff = 0;
for (int j = 0; j < m; ++j) {
if (s.charAt(i + j) != pattern.charAt(j)) diff++;
if (diff > 1) break;
}
if (diff <= 1) return i;
}
return-1;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
classSolution {
funfindAlmostEqualSubstring(s: String, pattern: String): Int {
val n = s.length
val m = pattern.length
for (i in0..n - m) {
var diff = 0for (j in0 until m) {
if (s[i + j] != pattern[j]) diff++if (diff > 1) break }
if (diff <=1) return i
}
return -1 }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
classSolution:
deffindAlmostEqualSubstring(self, s: str, pattern: str) -> int:
n, m = len(s), len(pattern)
for i in range(n - m +1):
diff =0for j in range(m):
if s[i + j] != pattern[j]:
diff +=1if diff >1:
breakif diff <=1:
return i
return-1
impl Solution {
pubfnfind_almost_equal_substring(s: String, pattern: String) -> i32 {
let n = s.len();
let m = pattern.len();
let s = s.as_bytes();
let p = pattern.as_bytes();
for i in0..=n - m {
letmut diff =0;
for j in0..m {
if s[i + j] != p[j] {
diff +=1;
if diff >1 {
break;
}
}
}
if diff <=1 {
return i asi32;
}
}
-1 }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
classSolution {
findAlmostEqualSubstring(s: string, pattern: string):number {
constn=s.length, m=pattern.length;
for (leti=0; i+m<=n; ++i) {
letdiff=0;
for (letj=0; j<m; ++j) {
if (s[i+j] !==pattern[j]) {
diff++;
if (diff>1) break;
}
}
if (diff<=1) returni;
}
return-1;
}
}