算法小知识-----9.30----- 字符串轮转 + 同构字符串

117 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

我宣布,快乐周五,大家直接开启国庆小长假

字符串轮转

该题出自力扣的面试题 01.09 字符串轮转【简单题】

审题

字符串轮转。给定两个字符串s1s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottleerbottlewat旋转后的字符串)。

  • 这道题题目很简单,就是给出两个字符串,判断字符串是否是另一个子串的子串,旋转而成其实也可以是子串,因为首尾衔接的话,就可以理解成子串了
  • 其实刚才已经提及到了如何解决的方法了,就是字符串首位相接的话,那么就可以利用子串的contains方法了
  • 先判断两个字符串的长度是否一致
  • s1自行拼接成为两个s1,再用contains方法即可

编码

class Solution {
    public boolean isFlipedString(String s1, String s2) {
        if (s1.length() != s2.length())return false;
        s1 = s1 + s1;
        return s1.contains(s2);
    }
}

image.png

同构字符串

该题出自力扣的205题 —— 同构字符串【简单题】

审题

给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

  • 题目虽然有点拗口,但也不难理解,其实就是字符串的对应,下标与字符串的对应。两个字符串的对应字符下标不一定相等,但是结构必须相等 —— AABC之类的结构
  • 通过题解的研读,知道可以使用下标的判断,判断当前字符所在的下标是否与另一字符串所在的下标相等

编码

class Solution {
    public boolean isIsomorphic(String s, String t) {

        for (int i = 0; i < s.length(); i++) {
            if (s.indexOf(s.charAt(i)) != t.indexOf(t.charAt(i)))return false;
        }
        return true;
    }
}

image.png