首页 > 解决方案 > 如何合并数组中的索引以在 Java 中创建 1 个主数组/字符串?

问题描述

输入应该是

ABDECDEABCAADD
ABCDE

第一行是一段随机文本。第二行是循环移位。

输出应该是:

yes

该程序应该获取一段文本并根据第二行输入确定它是否包含循环移位。循环移位是指将字符串的第一个字母移到字符串的后面。从而创建一个新字符串。

如果输入的文本包含从第二行开始的循环移位,则输出为“是”,否则为“否”。

由于 ABDECDEABCAADD 包含 DEABC,它是 ABCDE 的一个移位,因此输出为是。

Scanner scan = new Scanner(System.in);
    
    String text;
    
    
    System.out.println("Enter text:");
    text=scan.nextLine();
    
    System.out.println("Enter shift:");
    String shift=scan.nextLine();
    
    
    String[] split1=shift.split("");
    String[] array2=new String[split1.length];
    String[] array3=new String[split1.length];
    
    for(int z=0;z<split1.length;z++) {
    
        array2[split1.length-1]=split1[0];
    
        for(int x=0;x<split1.length-1;x++) {
            array2[x]=split1[x+1];
            array3[0]=array2[x]+array2[x+1];
        }
        
    //if(text!=)
    }
    
    for(int y=0;y<array2.length;y++) {
        System.out.print(array2[y]);
    }

我想如何解决这个问题是首先获取输入,然后将第二行分成字符,这样我就可以创建一个循环移位。完成后,我将采用新的字符顺序并将它们合并以创建一个字符串。

在合并方面,我需要帮助,也需要我如何创建多个班次。如果你看到这个请帮忙。

标签: java

解决方案


不要创造轮班。为了获得最佳性能,请这样做:

String text = "ABDECDEABCAADD";
String shift = "ABCDE";
  1. 扫描text中的第一个字符shift,即扫描'A'.

  2. 找到后,尽可能多地匹配以下字符。

  3. 如果不是所有字符shift都匹配,则获取丢失字符的计数。

  4. 'A'如果可用,请从找到的 之前获取那么多字符。

  5. 如果找到并且它们与 中的剩余字符匹配shift,则您的搜索完成。

  6. 从步骤 1 开始重复,搜索下一个'A'.

例子

static int matchShift(String text, String shift) {
    if (shift.isEmpty())
        throw new IllegalArgumentException("Shift value is empty");
    char first = shift.charAt(0);
    for (int i = 0; i < text.length(); i++) {
        if (text.charAt(i) == first) {
            int j = 1;
            while (j < shift.length() && i + j < text.length()
                   && text.charAt(i + j) == shift.charAt(j))
                j++;
            if (j == shift.length())
                return i; // Match found at index 'i', with unshifted value
            int start = i + j - shift.length();
            if (start >= 0 && text.substring(start, i).equals(shift.substring(j, shift.length())))
                return start; // Match found at index 'start', with shifted value
        }
    }
    return -1; // No match found
}

测试

public static void main(String[] args) {
    test("ABDECDEABCAADD", "ABCDE");
}

static void test(String text, String shift) {
    int i = matchShift(text, shift);
    if (i == -1)
        System.out.printf("'%s', '%s': No Match%n", text, shift);
    else
        System.out.printf("'%s', '%s': Match at index %d ('%s')%n",
                          text, shift, i, text.substring(i, i + shift.length()));
}

输出

'ABDECDEABCAADD', 'ABCDE': Match at index 5 ('DEABC')

它也可以用Match at index 4 ('CDEAB'). 如果这很重要,请更改逻辑以搜索最后一个字符而不是一个字符,向后匹配,然后比较之后的子字符串。


推荐阅读