https://datawhalechina.github.io/leetcode-notes/#/ch07/07.01/07.01.01-Exercises
总共有11题, 051-062
前三题做起来,比较顺手, 是关于字符串的基本处理
1.003无重复最长子串,主要设置了从最左到碰到 重复字符时的处理逻辑,就可以了
2.最长回文子串,遍历来得到结果
3.字符串转整数, 处理好正负, 处理好最大值就可以完成
后三题,处理了两道
4.反转, 用了split函数
5. (缺)相乘
6.最长公共前缀,取第一个字串的前缀来进行遍历比较
二叉树的做了两题
7. 前序遍历, 做好 回归算法
8. 中序遍历, 做一个回归算法
9.(缺)层序遍历,

class Solution {
public int change(int[] kk,int i,int j,String s,int max){
int k=i;
for(;k<j;k++)if(s.charAt(k)==s.charAt(j))break;
for(int x=i;x<=k;x++)kk[s.charAt(x)]--;
return k+1;
}
public int lengthOfLongestSubstring(String s) {
int max=0;
int[] kk=new int[256];
for(int i=0;i<s.length();i++){
kk[s.charAt(i)]++;
for(int j=i+1;j<s.length();j++){
if(kk[s.charAt(j)]==0)kk[s.charAt(j)]++;
else{
System.out.println("before:"+i+":"+j+":"+max);
if(max<j-i)max=j-i;
i=change(kk,i,j,s,max);
kk[s.charAt(j)]++;
System.out.println("after:"+i+":"+j+":"+max);
}
}
if(s.length()-i>max)max=s.length()-i;
break;
}
return max;
}
}
https://leetcode.cn/problems/longest-palindromic-substring/description/
class Solution {
public String longestPalindrome(String s) {
int max=0;
String ret="";
int k=0;
boolean flag=true;
for(int i=0;i<s.length();i++){
for(int j=s.length()-1;j>=i;j--){
k=0;flag=true;
for(;k+i<=j-k;k++)if(s.charAt(k+i)!=s.charAt(j-k)){flag=false;break;}
if(flag&&j-i+1>max){max=j-i+1;ret=s.substring(i,j+1);}
}
}
return ret;
}
}
class Solution {
public int myAtoi(String s) {
long tmp=0l;
s=s.trim();
boolean reg=false;
int st=0;
if(s.length()<1)return 0;
if(s.charAt(0)=='-'){reg=true;st=1;}
else if(s.charAt(0)=='+'){st=1;}
else if(s.charAt(0)<'0'||s.charAt(0)>'9')return 0;
int cnt=0;
while(st<s.length()&&s.charAt(st)>='0'&&s.charAt(st)<='9'){
tmp=tmp*10+(s.charAt(st)-'0');
st++;
if(tmp>0)cnt++;
if(cnt==11)break;
}
if(reg)tmp=-1*tmp;
return tmp>Integer.MAX_VALUE?Integer.MAX_VALUE:(tmp<Integer.MIN_VALUE?Integer.MIN_VALUE:(int)tmp);
}
}
class Solution {
public String reverseWords(String s) {
String[] tmp=s.trim().split("s");
StringBuilder sb=new StringBuilder(tmp[tmp.length-1]);
for(int i=tmp.length-2;i>=0;i--)if(tmp[i].trim().length()>0)sb.append(" "+tmp[i]);
return sb.toString();
}
}
class Solution {
public String longestCommonPrefix(String[] strs) {
String ret="";
boolean flag=true;
if(strs[0].length()<1)return "";
String tmp=strs[0].substring(0,1);
for(int i=1;i<=strs[0].length();i++){
tmp=strs[0].substring(0,i);
flag=true;
for(int j=1;j<strs.length;j++)if(strs[j].length()<i||!strs[j].startsWith(tmp)){flag=false;break;}
if(!flag){ret=strs[0].substring(0,i-1);break;}
else ret=tmp;
}
return ret;
}
}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public void doChild(List<Integer> ret,TreeNode ll,TreeNode rr){
if(ll!=null){ret.add(ll.val);doChild(ret,ll.left,ll.right);}
if(rr!=null){ret.add(rr.val);doChild(ret,rr.left,rr.right);}
}
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> ret=new ArrayList<>();
if(root!=null){
ret.add(root.val);
doChild(ret,root.left,root.right);
}
return ret;
}
}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public void doChild(List<Integer> ret,TreeNode root){
if(root!=null){
doChild(ret,root.left);
ret.add(root.val);
doChild(ret,root.right);
}
}
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> ret=new ArrayList<>();
if(root!=null){
doChild(ret,root.left);
ret.add(root.val);
doChild(ret,root.right);
}
return ret;
}
}