思路很简单,冒泡比对两个单词的每一位,比对到不相同位为止,对比已有的最大前缀,如果更大则更新,最终得出结果。
@Test
public void testMaxCommonPrefix() {
String[] strs = {"flower", "float", "fight", "flaaay", "flaaaat"};
System.out.println(maxCommonPrefix(strs));
}
public String maxCommonPrefix(String[] strs) {
StringBuilder sampleChar = new StringBuilder(); //最大前缀(结果)
for (int i = 0; i < strs.length; i++) { //冒泡比较每个单词
for (int j = 0; j < strs.length - 1 - i; j++) {
StringBuilder tempSampleChar = new StringBuilder(); //临时最大前缀
for (int i1 = 0; i1 < strs[i].length() && i1 < strs[i + 1].length(); i1++) { //遍历每一位
if (strs[i].charAt(i1) == strs[i + 1].charAt(i1)) { //两个单词的每一位字母是否相等
tempSampleChar.append(strs[i].charAt(i1));
} else {
break;
}
}
if (tempSampleChar.length() > sampleChar.length()) { //临时最大前缀>最大前缀,赋新值
sampleChar = tempSampleChar;
}
}
}
return sampleChar.toString();
}
二维数组实现的清晰版本:
@Test
public void testSpace() throws UnsupportedEncodingException {
String[] strs = {"flower", "float", "fight", "fly", "flat"};
char[][] multiChar = new char[strs.length][];
for (int i = 0; i < strs.length; i++) { //转成二维字符表
multiChar[i] = strs[i].toCharArray();
}
StringBuilder sampleChar = new StringBuilder(); //最大前缀(结果)
for (int i = 0; i < multiChar.length; i++) { //冒泡比较每个单词
for (int j = 0; j < multiChar.length - 1 - i; j++) {
char[] curStr = multiChar[i];
char[] nextStr = multiChar[i + 1];
StringBuilder tempSampleChar = new StringBuilder(); //临时最大前缀
for (int i1 = 0; i1 < curStr.length && i1 < nextStr.length; i1++) { //遍历每一位
if (curStr[i1] == nextStr[i1]) { //两个单词的每一位是否相等
tempSampleChar.append(curStr[i1]); //追加相同部分
} else {
break;
}
}
if (tempSampleChar.length() > sampleChar.length()) { //临时最大前缀>最大前缀,赋新值
sampleChar = tempSampleChar;
}
}
}
System.out.println(sampleChar.toString());
}
暑期编程PK赛
得CSDN机械键盘等精美礼品!


