1、给定彼此独立的两颗树头节点分别为t1和t2,判断t1中是否有与t2树拓扑结构完全相同的子树
二叉树序列化+KMP
str1 和 str2 判断str1中是否包含str2
2、给定两个字符串str1和str2,str1和str2中出现的字符种类相同且出现次数也一样,那么str1和str2互为变形词,判断两个词是否为变形词
哈希表,用长度为256的整形数组代替哈希表
int[] map=new int[256];
遍历字符串str1,比如遍历到字符‘a’,其编码值为97,则令map[97]++
再遍历str2,每遍历到一个字符都在map中把词频减下来,如果减小后的值小于0,返回false;如果遍历完str2,也没出现负值,则返回true;
3、判断str1和str2是否是互旋词
步骤:
判断str1和str2长度是否相等
如果长度相等,生成str1+str2的大字符串
用KMP算法判断大字符串中是否含有str2
4、给定一个字符串,在单词间做逆序
pig loves dog 逆序成 dog loves pig
两次逆序
步骤:
实现将字符串局部所有字符逆序的函数f
利用f将字符串所有字符逆序
找到逆序后的字符串中每一个单词的区域,利用f将每一个单词的区域逆序
5、给定一个字符串str,和一个整数i,i代表str中的位置,将str[0…i]移到右侧,str[i+1…N-1]移到左侧
步骤:
将str[0…i]部分的字符逆序
将str[i+1…N-1]部分的字符逆序
将str整体的字符逆序
6、给定一个字符串类型数组strs,请找到一种拼接顺序,使得将所有字符串拼接起来组成的大字符串是所有可能性中字典序最小的
步骤:
如果str1+str2<str2+str1,则str1放在前面;否则,放在后面
7、给定一个字符串,判断是不是整体有效的括号字符串
步骤
1)整型变量num,代表‘(’出现次数与‘)’出现次数的差值
2)遍历过程中如果遇到‘(’,则num++
3)遍历过程中如果遇到‘)’,则num--
4)如果出现num<0,则直接返回fasle;
5)如果没有出现情况4,则一直遍历下去;
6)遍历完成后,如果num==0,则返回true,否则,false;;
8、给定一个字符串,返回str中最长无重复字符子串的长度
思路:求出以str中每个字符结尾的情况下,最长无重复字符子串的长度,并在其中找出最大值返回
使用HashMap记录字符上次出现的位置,用pre记录最近重复字符出现的位置,则i(当前位置)-pre就是当前字符最长无重复字符的长度,取最大的就是字符串的最长无重复字符的长度
public int lengthOfLongestSubstring(String str) {
if (str == null || str.length() < 1)
return 0;
// 记录字符上次出现的位置
HashMap<Character, Integer> map = new HashMap<>();
int max = 0;
// 最近出现重复字符的位置
int pre = -1;
for (int i = 0, strLen = str.length(); i < strLen; i++) {
Character ch = str.charAt(i);
Integer index = map.get(ch);
if (index != null)
pre = Math.max(pre, index);
max = Math.max(max, i - pre);
map.put(ch, i);
}
return max;
}
本文深入探讨了多种字符串操作方法,包括判断子树结构相似性、变形词验证、互旋词检查、字符串逆序、字符串旋转、字典序拼接、括号有效性判断及最长无重复子串长度计算。
5357

被折叠的 条评论
为什么被折叠?



