首页 > 试题广场 >

两个子串

[编程题]两个子串
  • 热度指数:4973 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定一个字符串 s , 请计算输出含有连续两个 s 作为子串的最短字符串。 注意两个 s 可能有重叠部分。例如, "ababa" 含有两个 "aba".

数据范围:输入的字符串长度满足 ,且保证只含有小写英文字母

输入描述:
输入包括一个字符串s,字符串长度length(1 ≤ length ≤ 50),s中每个字符都是小写字母.


输出描述:
输出一个字符串,即含有连续两个s作为子串的最短字符串。
示例1

输入

abracadabra

输出

abracadabracadabra
示例2

输入

a

输出

aa
import java.util.Scanner;
public class Main{
    public static void main (String[] args) {
        Scanner input = new Scanner(System.in);
        String s = input.nextLine();
        String out = s + s;
        String sub = "";
        int len = s.length(); 
        int index = len;
        for(int i= len-1; i >= 1; i--) {
            sub = s.substring(i,len);
            if(s.startsWith(sub)) index = i;
        }
         if(index != len) out = s + s.substring(len-index,len);
        System.out.print(out);
    }
}

//逆序取子串,用s.startswith(s1)判断子串是不是符合条件,记录最大的子串的index,
out = s + s.substring(len-index,len);//输出有子串时的结果
编辑于 2019-04-14 11:20:03 回复(0)
比较菜,写了半天
1)先从后找出重复部分记下索引
2)切割字符串
3)添加在一起
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner= new Scanner(System.in);
        char [] in =scanner.next().toCharArray();
        int sum=0;
        for(int l=in.length-1,i=0;l>0;l--){
            int num=0;
            int fir=l;
            int end=i;
            while (fir<in.length&&end<in.length&&(in[fir]== in[end])){
                num+=1;
                fir++;
                end++;
                if (sum<num&&fir==in.length)
                    sum=num;
            }
        }
        StringBuilder st = new StringBuilder();
        st.append(in);
        String st1=st.substring(sum);
        st.append(st1);
        System.out.println(st);
    }
}
发表于 2019-04-13 13:58:34 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String string = sc.next();
        int l = string.length();
        StringBuilder sBuilder = new StringBuilder(string+string.charAt(l-1));
        for(int i=1;i<l;i++){
            String string2 = sBuilder.toString();
            if(string2.endsWith(string))break;
            sBuilder.insert(sBuilder.length()-i, string.charAt(l-1-i));
        }
        System.out.println(sBuilder);
    }
}

发表于 2019-03-14 20:20:50 回复(0)