首页 > 试题广场 >

翻转子串

[编程题]翻转子串
  • 热度指数:26946 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定2个字符串s1和s2,请判断s2是否为s1旋转而成,返回bool值。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。


测试样例:
"Hello world","worldhello "
返回:false
"waterbottle","erbottlewat"
返回:true
本来还想逐个字符匹配结果 !!!!我居然看到了这种解法

public boolean checkReverseEqual(String s1, String s2) {
        // write code here
        String s=s1+s1;
        if(s.indexOf(s2)>-1){
            return true;
        }
        return false;
    }
发表于 2021-09-12 22:50:25 回复(0)

import java.util.*;

public class ReverseEqual {
public boolean checkReverseEqual(String s1, String s2) {
// write code here
boolean b = false;
if(s1.length()!=s2.length()) {
return false;
}
String str = s1+s2;
if(str.contains(s2)) {
b=true;
}
return b;
}
}

编辑于 2018-07-25 16:29:23 回复(1)
import java.util.*;

public class ReverseEqual {
public boolean checkReverseEqual(String s1, String s2) {
// write code here
String s = s1+s1;
if(s.indexOf(s2)>-1)
{
return true;
}
else{
return false;
}
}
}

这个题目有歧义,“反转”开始我以为是字符串里的所有字符都前后调换位置。看了例子才明白是前后切换位置。那A+A 里肯定包含 B,如果B是Az字符串里字符前后切换位置的话
编辑于 2018-03-21 21:27:21 回复(0)
public class ReverseEqual {
    public boolean checkReverseEqual(String s1, String s2) {
        if(s1.length()!=s2.length()){
            return false;
        }
        int [] strA = new int[1000];
        int [] strB = new int[1000];
        for(int i =0;i<s1.length();i++){
            strA[s1.charAt(i)]++;
            strB[s2.charAt(i)]++;
        }
        for(int j = 0;j<s1.length();j++){
            if(strA[j] != strB[j]){
                return false;
            }
        }
        return true;
    }
}

发表于 2017-10-02 22:12:45 回复(0)
/*
    翻转子串,这个名字起的太,,模糊了,也可能是因为我语文是体育老师教的吧。
*/
public boolean checkReverseEqual(String s1, String s2) {
        // write code here
        if(s1.length()!=s2.length()){
            return false;
        }
        String str=s1+s1;
        if(str.contains(s2)){
            return true;
        }else{
            return false;
        }
    }

发表于 2017-09-30 19:10:55 回复(0)
public class ReverseEqual {

	/**
	 * 翻转子串
	 * 法二,优化了性能
	 */
	 public boolean checkReverseEqual(String s1, String s2) {
	        // write code here
		 int length = s1.length();
		 if (length == s2.length() && length > 0) {
			String s1s1 = s1 + s1;
			return isSubString(s1s1,s2);
		}
		 return false;
	    }

	private boolean isSubString(String s1s1, String s2) {
		int lengthS1s1 = s1s1.length();
		if (lengthS1s1 < s2.length() || lengthS1s1 <= 0 || s2.length() <= 0) {
			return false;
		}
		//使用contains方法,当且仅当此字符串包含s(指定的 char值序列)时,返回 true。
		else if(s1s1.contains(s2)){
			return true;
		}
		return false;
	}

}

发表于 2017-08-28 11:46:28 回复(0)

思路:将s2和自己拼接之后得到s3,看s3是否包含s1。直接使用String类的函数contains来检查是否字符串匹配。

    public boolean checkReverseEqual(String s1, String s2) {
        if(s1 == null || s2 == null) return false;
        if(s1.length() != s2.length()) return false;
        if(s1.length() == 0 && s1.length() == 0) return true;

        String s3 = s2 + s2;
        return s3.contains(s1);
    }
发表于 2017-08-09 10:11:08 回复(0)
看了评论才知道题目意思,对不起语文老师,话说我是来找茬的,我把它当初前面一题,两个字符串异序同构做的,竟然AC了,这测试用例,已提交纠错了,不过话说我已纠错了不下好几题了,至今没有得到反馈啊,不知道是不是我太菜,大神没空搭理我,让我哭会,

//能AC的错误代码
 public boolean checkReverseEqual(String s1, String s2) {
        if(s1==null||s2==null) return false;
        if(s1.length()!=s2.length()) return false;
        int[] hash1=new int[256];
        int[] hash2=new int[256];
        for(int i=0;i<s1.length();i++){
            hash1[s1.charAt(i)]++;
            hash2[s2.charAt(i)]++;
        } 
        for(int j=0;j<hash1.length;j++) if(hash1[j]!=hash2[j]) return false;
        return true;
    }

//正确代码 方法一
public boolean checkReverseEqual(String s1, String s2) {
        if(s1==null||s2==null) return false;
        if(s1.length()!=s2.length()) return false;
        s1=s1+s1;
        return s1.indexOf(s2)==-1?false:true;
    }
//同上,方法二 自己写匹配部分
public boolean checkReverseEqual(String s1, String s2) {
        if(s1==null||s2==null) return false;
        if(s1.length()!=s2.length()) return false;
        s1+=s1;
        int count=0;
        for(int i=0;i<s1.length()&&count<s2.length();i++){
            if(s2.charAt(count)==s1.charAt(i)) count++;
            else count=0;
        }
        return count==s2.length()?true:false;
    }

编辑于 2017-05-11 19:24:07 回复(3)
//KMP判断子串,然后s1+s1和s2比较
//(原来可以直接调用库函数啊)
import java.util.*;

public class ReverseEqual {
    public boolean checkReverseEqual(String s1, String s2) {
        s1+=s1;
        int[] next=getNext(s2);
        return KMP(s1,s2,next);
    }
    public boolean KMP(String s1,String s2,int[] next){
        int j=0;
        for(int i=0;i<s1.length();i++){
            while(j>0&&s1.charAt(i)!=s2.charAt(j))
                j=next[j-1];
            if(s1.charAt(i)==s2.charAt(j))
                j++;
            if(j==s2.length())
                return true;
        }
        return false;
    }
    public int[] getNext(String s){
        int[] next=new int[s.length()];
        next[0]=0;
        int j=0;
        for(int i=1;i<s.length();i++){
            while(j>0&&s.charAt(j)!=s.charAt(i))
                j=next[j-1];
            if(s.charAt(j)==s.charAt(i))
                j++;
            next[i]=j;
        }
        return next;
    }
}

发表于 2017-04-07 16:24:36 回复(0)
import java.util.*;
  //笨了点,只能想到这样粗暴直接的方法了
public class ReverseEqual {
    public boolean checkReverseEqual(String s1, String s2) {
        // write code here
        StringBuilder sb=new StringBuilder(s1);
boolean flag=false;
for(int i=0;i<s1.length();i++){
                    //这里就是为了移位,把第一位放在末尾,然后再删除第一位,就达成的循环移位的效果
sb.append(sb.charAt(0));
sb.deleteCharAt(0);
if(s2.equals(sb.toString())){
flag=true;
break;
}
}
    return flag;
    }
}
发表于 2017-04-03 12:43:47 回复(0)
import java.util.*;

public class ReverseEqual {
    public boolean checkReverseEqual(String s1, String s2) {
         ArrayList<String> list = new ArrayList<>();
        if (!list.contains(s1)) {
            list.add(s1);
            for (int j = 0; j < s1.length() - 1; j ++) {
                char last = s1.charAt(s1.length()-1);
                s1 = s1.substring(0, s1.length()-1);
                s1 = last + s1;
                list.add(s1);
            }
        }
        return list.contains(s2);
    }
}

发表于 2017-03-15 09:45:06 回复(0)
public class ReverseEqual {
    public boolean checkReverseEqual(String s1, String s2) {
        String s = s1 + s1;
        return s.indexOf(s2) > 0;
    }
}

发表于 2016-08-29 23:49:29 回复(0)

问题信息

难度:
13条回答 32832浏览

热门推荐

通过挑战的用户

查看代码