面试题 01.09. 字符串轮转

Posted bincode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题 01.09. 字符串轮转相关的知识,希望对你有一定的参考价值。

题目来源:https://leetcode-cn.com/problems/string-rotation-lcci/

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

示例1:

输入:s1 = "waterbottle", s2 = "erbottlewat"
输出:True
示例2:

输入:s1 = "aa", s2 = "aba"
输出:False
提示:

字符串长度在[0, 100000]范围内。

1 class Solution {
2     public boolean isFlipedString(String s1, String s2) {
3         if(s1.length() != s2.length()) return false;
4         String s = s2+s2;
5         return s.contains(s1);  // 0ms
6     }
7 }

 

有意思的错误分享:

  刚开始把题目当成字符串反转后比对;

 1 public class 字符串轮转 {
 2     public boolean isFlipedString(String s1, String s2) {
 3         if(s1.length() != s2.length()) return false;
 4         StringBuilder builder = new StringBuilder();
 5         builder.append(s2); 7         return s1.equals((builder.reverse().toString()));
 8     }
 9 
10     public static void main(String[] args) {
11         字符串轮转 str = new 字符串轮转();
12         System.out.println(str.isFlipedString("abcd", "dcba"));
13     }
14 }

学习记录:

  1、 == 和 equals的区别?

    ==:对于基本类型来说是值比较,对于引用类型来说比较的是引用;

    equals:默认情况下是引用比较,而(String、Integer等)类重写了equals方法,变成了值比较;

  2、StringBuilder是否也是值比较?

    不是的!!

    String在底层源码中重写了equals方法,但是StringBuilder没有重写equals方法,所以它还是引用比较

//StringBuilder源码
public
boolean equals(Object obj) { return (this == obj); }

    我们可以将StringBuilder通过toString转换成String再进行值比较

以上是关于面试题 01.09. 字符串轮转的主要内容,如果未能解决你的问题,请参考以下文章

面试题 01.09. 字符串轮转

面试题 01.09. 字符串轮转(拼接)

面试算法题 专题 —— 字符串

算法练习80.字符串轮转——奇淫技巧

Leetcode -面试题17.04.消失的数字 -189.轮转数组

程序员面试题01