public class StringCompare /* 简洁的讲问题核心为维护以T.length为长的在S中滑动窗口中a,b数目 */ { public static void main(String... args) {
String S = "aaabb";
String T = "bab"; int m = S.length(); int n = T.length(); int a = 0; int b = 0; for (int i = 0; i < m - n + 1; i++) { if (S.charAt(i) == 'a')
a++; else b++;
} int sum = 0; for (int i = 0; i < n; i++) { if (T.charAt(i) == 'a')
sum += b; else sum += a; if (i + m - n + 1 < m && S.charAt(i) != S.charAt(i + m - n + 1)) { if (S.charAt(i) == 'a') {
a--;
b++;
} else {
a++;
b--;
}
}
}
System.out.println(sum);
}
}
代码可能写的比较丑参考别人的思路,直接看代码也更容易懂,核心是以T中每一个字母为对象,预先确定它和S中哪个范围内(滑动窗口)的字符串作比较,统计窗口内a,b数目,
遍历T中字母时只需要更新S对应窗口中a,b数目就行了,这样每次遍历T中元素都用到了除去上次窗口首尾中a,b数目
#笔试题目##春招#