题目链接:点击打开链接
Eddy的难题
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
<p align="\"LEFT\"" 0cm;="" widows:="" 2;="" orphans:="" 2\"="" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 3px;">人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何 判断了,但是发现,现在长大了却不知道怎么去判断亲和串了,于是他只好又再一次来请教聪明且乐于助人的你来解决这个问题。
亲和串的定义是这样的:给定两个字符串s1和s2,如果能通过s1循环移位,使s2包含在s1中,那么我们就说s2 是s1的亲和串。
亲和串的定义是这样的:给定两个字符串s1和s2,如果能通过s1循环移位,使s2包含在s1中,那么我们就说s2 是s1的亲和串。
Input
本题有多组测试数据,每组数据的第一行包含输入字符串s1,第二行包含输入字符串s2,s1与s2的长度均小于100000。
Output
如果s2是s1的亲和串,则输出"yes",反之,输出"no"。每组测试的输出占一行。
Example Input
AABCD CDAA ASD ASDF
Example Output
yes no
Hint
Author
glt
代码实现:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws ParseException {
Scanner input = new Scanner(System.in);
while(input.hasNext()){
String str1 = input.next();
String str2 = input.next();
if(isExist(str1, str2))
System.out.println("yes");
else
System.out.println("no");
}
}
public static boolean isExist(String str1,String str2){
boolean flag = false;
//构造缓冲区
StringBuffer buffer = new StringBuffer(str1);
//移位的次数
int index = 0;
//若原串就包含,则结束
//未包含,循环移位,在判断,直至还原为原串
do{
if(buffer.toString().contains(str2)){
flag = true;
break;
}
else{
char ch = str1.charAt(index);
buffer.deleteCharAt(0).append(ch);
index++;
}
}while(index < str1.length());
return flag;
}
}
法二:
package hhh;
import java.text.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws ParseException {
Scanner input = new Scanner(System.in);
while (input.hasNext()) {
String str1 = input.next();
String str2 = input.next();
if(str1.length() < str2.length())
System.out.println("no");
else{
StringBuffer str3 = new StringBuffer(str1);
StringBuffer str4 = new StringBuffer(str2);
str3.append(str1);
if(str3.toString().contains(str4))
System.out.println("yes");
else
System.out.println("no");
}
}
}
}