判断是否有公共子串是很简单的问题,暴力遍历应该可以解决的,但是在OJ上大长度的字符串会超出题目的时间效率限制。
这里简单记录一下判断公共字串的一种相对巧妙的方式,利用二维数组存储所有字母的邻接可能(这里假设都是小写字母)
public boolean isCommonStr(String a, String b) {
boolean[][] mark = new boolean[26][26];
for(int i=0; i<a.length()-1; i++) {
mark[a.charAt(i)-'a'][b.charAt(i+1)-'a'] = true;
}
boolean found = false;
for(int j=0; j<b.length()-1; j++) {
if(mark[b.charAt(j)-'a'][b.charAt(j+1)-'a']) {
found = true;
}
}
return found;
}
怎么说呢,其实题目挺简单的,不过这种思想是可以引申到很多其他问题上的,领会精神加以使用,很多刷题的思想和套路也是慢慢积攒过来的,算法小渣渣的感慨而已。