一、笔记部分
注意点:
1.List的使用,获取"apple"的字符串,list.get(1)
2.如果是查询等,一般有两个对象,一个对象分配个指针,如果只是求和比较,直接就可以在一个对象上完成,一般就是双头指针跑。
第一个暴力解法:
1,找出s的所有情况,依次在字典里进行比较。找出最长的,并出现次序在其前的。
一段字符的所有情况算法(只删除一个或多个字符,不能将字符交换顺序)
List<String> l=new ListArrary<>();
str="";
generate(s,str,0,l);
pubilc void generate (String s,String str ,int i ,List <String>l){
if(s.length==i)
l.add(str);
//这里巧用额外字符串,一直输出各种情况的字字符串
else{
generate(s,str+s.charAt(i),i+1,l);//如果只有一句的话只能输出abc ,若s=”abc“
generate(s,str,i+1,l);
//就仅仅多这一行,结果就多了6个,每次总比第一行少一个字母,比如三个字母,就会让一、二、三个字母情况都输出,然后在这前面的情况再删减一个字母,组成新型的空的、一个、二个字母。依次递减字母,达到所有情况,如下图。
如果只有1行,那么只是调用3次,两行就直接2^3
}
}
方法二:双指针,找子序列。
自己写的(跟粑粑一样,还调试不过。)
错误:
1.题目没说要返回最大长度,没必要专门去搞最大长度,判断是不是,一般都是子函数返回布尔类型
题目中是返回长度最长且字典顺序最小的字符串,可以删除,说明字典的字符串是给出字符串的子序列,双指针判定,然后返回boolean,主函数返回str,利用增强for,其中条件是长度最长且顺序靠前。
正确版本:
str.compare(str2)比较,
1.当两个字符串一样属于包含关系的时候,返回的结果是两个长度相减的值
2.长度不一样且前几个字符也不一样,从第一位开始找,当找到不一样的字符时,则返回的值时这两个字符比较值。
二、双指针类型的高频面试题汇总:
https://blog.csdn.net/qq_40262372/article/details/112557634
三、各种类型的高频面试题汇总:
https://blog.csdn.net/qq_40262372/article/details/112556249