字符串

本文深入探讨了多种字符串操作方法,包括判断子树结构相似性、变形词验证、互旋词检查、字符串逆序、字符串旋转、字典序拼接、括号有效性判断及最长无重复子串长度计算。

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;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值