第一次讀完這個題目杠园,就感覺這個題目非常之復(fù)雜富稻。但是仔細(xì)想過之后栅盲,就是檢測是否長字符串包含短字符串且短字符串是長字符串的結(jié)尾部分汪诉,如果包含就只保留長字符串。
下面展示一種使用java8 stream解題的方式
基本思路注釋在代碼里
class Solution {
public int minimumLengthEncoding(String[] words) {
return Arrays.asList(words)
.stream()
// 將字符串反轉(zhuǎn)谈秫,例如原來是"abc"扒寄,反轉(zhuǎn)之后是"cba"
.map(StringBuilder::new)
.map(StringBuilder::reverse)
.map(StringBuilder::toString)
// 將所有的字符串倒敘排序,就是說相同前綴的字符串拟烫,較長的排在前面
.sorted(Comparator.reverseOrder())
// 將字符串按照time#bell#的形式組合在一起该编,如果后面有字符串符合下面條件,就說明這個字符串是前面某個字符串的后綴硕淑。
.reduce((s1, s2) -> {
if (s1.contains("#" + s2) || s1.startsWith(s2)) {
return s1;
} else {
return s1 + "#" + s2;
}
})
// 最后獲取字符串的長度
.get()
.length() + 1;
}
}