输入应该是
ABDECDEABCAADD
ABCDE
第一行是随机文本。第二行是循环移位。
输出应该是:
yes
该程序应该接受一段文本,并根据输入的第二行确定它是否包含循环移位。循环移位是指获取字符串的第一个字母并将其移至字符串的末尾。从而创建一个新的字符串。
如果输入的文本包含从第二行起的循环移位,则输出为是,否则为否。
由于ABDECDEABCAADD包含DEABC(这是ABCDE的移位),因此输出为yes。
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')
。如果这是很重要的,改变的逻辑来搜索最后一个字符,而不是第一个,匹配向后,然后比较子后。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句