常用算法统计(from 力扣)

75 阅读2分钟
String s = "ab";

s.charAt(i) 返回字符串指定索引字符

s.substring(i,j) 取[i,j)字符串Character.isLetterOrDigit(s) 判断字符是字母A-Z a-z还是数字0-9Character.toLowerCase(s) 大写转小写Character.toUpperCase(s) 小写转大写s.reverse() 反转字符char[] charArray = s.toCharArray() 字符串转为字符数组

String[] stringArray = s.split('') 字符串分割为单个字符串数组

String.valueOf(123) 将不同类型数据转为字符串"123"

str.replaceFirst("a","b") 替换第一个字符 s=“bb”

计数数组 - 统计每个字母出现个数
int[] cnt = new int[26];
cnt[s - 'a']++; 结果为cnt[1,1,1,0,...0]
System.arraycopy(源数组,源数组中要复制的起始位置,目标数组,目标数组中要复制到的起始位置复制的元素个数)  Java 中用于复制数组内容的方法

哈希表
HashMap 存储key-value
Map<Character,Integer> map = new HashMap<>();
map.get('a') 根据其key值,可以取到对应的value值
map.put('a',i) 存入map集合,值为key,索引为value
map.getOrDefault('a',0) 根据给定的键获取值,无返回0
map.containsKey('a') 检查'a'是否在hash表中

HashSet 存储值
Set<Integer> set = new HashSet<>();
set.add()
set.constains()
set.isEmpty()
set.remove()

栈
Stack<Character> stack = new Stack<>();
stack.push() 入栈
stack.pop() 出栈
stack.peek() 取栈顶元素
stack.isEmpty() 判栈空

动态数组
StringBuffer sb = new StringBuffer(); 线程安全,所有方法被synchronic修饰,用于多线程
StringBuilder sb1 = new StringBuilder(); 非线程安全,用于单线程
sb.append('a'); 字符串拼接- 动态加入字符串

单列集合
列表-动态数组
List<String> list = new ArrayList<>(); 
list.add("a"); 列表添加元素(表尾)
双向链表-队列 (树中广搜保证数据不重复使用)
Queue<TreeNode> queue1 = new LinkedList<TreeNode>();
queue1.offer(p); 指定元素插入队列尾部
queue1.poll(p); 移除并返回队列的头部元素

链表 ListNode
mergeTwoLists(ListNode list1,ListNode list2); 合并两个已排序的链表

树 TreeNode - 常用于递归
maxDepth(TreeNode root) 求root树高
isSameTree(TreeNode p , TreeNode q) 比较两树结构和值是否相同 
DFS深度优先搜索
BFS广度优先搜索