问题简介
编程思路
思路比较简单,
- 从字符串数组中获取最短的字符串以减少外层循环。
- 遍历最短字符串中的每个字符,是否都在数组中所有字符串的相应位置
代码实现
第一个版本-AC
public String longestCommonPrefix(String[] strs) {
StringBuilder stringBuilder = new StringBuilder();
// 获取最短字符串
String s = Arrays.stream(strs).max(Comparator.comparingInt(String::length).reversed()).get();
for (int i = 0; i < s.length(); i++) {
char charAt = s.charAt(i);
if (checkChar(strs, i, charAt)) {
stringBuilder.append(charAt);
} else {
return stringBuilder.toString();
}
}
return stringBuilder.toString();
}
/**
* 判断数组串中第i个字符是否等于基准字符
*
* @param strs 待校验的字符串数组
* @param i 第i个位置
* @param ch 判读第i个位置是否等于的基准字符
* @return
*/
private boolean checkChar(String[] strs, int i, char ch) {
for (String str : strs) {
if (str.charAt(i) != ch) {
return false;
}
}
return true;
}
第二个版本
public String longestCommonPrefix(String[] strs) {
StringBuilder stringBuilder = new StringBuilder();
// 获取最短字符串
String s = getSmallestStr(strs);
for (int i = 0; i < s.length(); i++) {
char charAt = s.charAt(i);
if (checkChar(strs, i, charAt)) {
stringBuilder.append(charAt);
} else {
return stringBuilder.toString();
}
}
return stringBuilder.toString();
}
/**
* 从字符串数组中获取最短的字符串
*
* @param strs 字符串数组 {"flower", "flow", "flight"} 返回"flow"
* @return
*/
private String getSmallestStr(String[] strs) {
return Arrays.stream(strs).max(Comparator.comparingInt(String::length).reversed()).get();
}
/**
* 判断数组串中第i个字符是否等于基准字符
*
* @param strs 待校验的字符串数组
* @param i 第i个位置
* @param ch 判读第i个位置是否等于的基准字符
* @return
*/
private boolean checkChar(String[] strs, int i, char ch) {
for (String str : strs) {
if (str.charAt(i) != ch) {
return false;
}
}
return true;
}
总结
新年就这样度过了,我没少让俺爸操心,希望吧,在新的一年里能让父母放心。还有就是白天尽量不要喝酒,不然很难受,白天是我们奋斗的时候,可以用来聊天,说话,沟通,如果睡过去的话,挺遗憾的。
身不饥寒,天未曾负我;
学无长进,我何以对天。
看了一篇文章,讲述的是如何维持良好的状态的。在此做个记录。
- 能控制早晨的人,方可控制人生。
- 在你沉醉于清晨的美梦时,他人已经走在为梦想拼搏的路上了,最可怕不是别人比你聪明,而是比你聪明的人,比你还努力。
- 成功的人都是相似的,他们懂得克制,善于利用时间,不把有限的时间用在无谓的事情上。
- 重组的睡眠是提高效率的前提,但并不意味着可以无止境地赖在床上。
- 别再晚睡,看着你眼睛下的黑眼圈,那是你熬夜看手机、电脑带来的。
- 富兰克林曾说:“我未曾见过一个早起勤奋的、谨慎诚实的人抱怨命运不好。”
2022年2月9日21:41:53于宋营