java - 如何合并数组中的索引以在 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]);
}
我想如何解决这个问题是首先获取输入,然后将第二行分成字符,这样我就可以创建一个循环移位。完成后,我将采用新的字符顺序并将它们合并以创建一个字符串。
在合并方面,我需要帮助,也需要我如何创建多个班次。如果你看到这个请帮忙。
解决方案
不要创造轮班。为了获得最佳性能,请这样做:
String text = "ABDECDEABCAADD";
String shift = "ABCDE";
扫描
text
中的第一个字符shift
,即扫描'A'
.找到后,尽可能多地匹配以下字符。
如果不是所有字符
shift
都匹配,则获取丢失字符的计数。'A'
如果可用,请从找到的 之前获取那么多字符。如果找到并且它们与 中的剩余字符匹配
shift
,则您的搜索完成。从步骤 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')
. 如果这很重要,请更改逻辑以搜索最后一个字符而不是第一个字符,向后匹配,然后比较之后的子字符串。
推荐阅读
- c++ - 如何将存储在向量容器中的值传递给新变量?
- sql - Oracle REST 处理程序拆分负载
- sql - 创建一个 SQL 触发器以在更新一个字段后将更新时间放在同一行中
- python - 在单个数据帧中附加循环输出
- reactjs - 如何使用 OpenLayers 使图像居中
- opengl - 说 OpenGL 3.2+ 核心配置文件基于“保留模式”模式是否正确?
- discord - Simultaneously running separate programs using the same token
- javascript - Typeguard 在 await new Promise 内部不起作用
- expression - mapbox:如何使用向表达式添加静态前缀(或后缀)?
- flutter - Flutter 从 url 下载文件,带有播放列表选项可供选择