字符串java中的递增数字序列
问题:检查字符串中的数字是否按递增顺序排列 返回:字符串java中的递增数字序列,java,algorithm,greedy,Java,Algorithm,Greedy,问题:检查字符串中的数字是否按递增顺序排列 返回: True->如果数字按递增顺序排列 False->如果数字不是按递增顺序排列的 字符串序列为: case1:1234(Easy)1假设输入的字符串用空格分隔,那么下面的代码如下所示,因为如果数字是作为整数输入的,我们无法分辨差异 boolean increasing = true; String string = "1 7 3 4"; // CHANGE NUMBERS String strNumbers[] = string.split(
- True->如果数字按递增顺序排列
- False->如果数字不是按递增顺序排列的
case1:1234(Easy)1假设输入的字符串用空格分隔,那么下面的代码如下所示,因为如果数字是作为整数输入的,我们无法分辨差异
boolean increasing = true;
String string = "1 7 3 4"; // CHANGE NUMBERS
String strNumbers[] = string.split(" "); // separate by spaces.
for(int i = 0; i < strNumbers.length - 1; i++) {
// if current number is greater than the next number.
if(Integer.parseInt(strNumbers[i]) > Integer.parseInt(strNumbers[i + 1])) {
increasing = false;
break; // exit loop
}
}
if(increasing) System.out.println("TRUE");
else System.out.println("FALSE");
布尔递增=true;
String String=“1 7 3 4”//换号码
字符串strNumbers[]=String.split(“”;//用空格隔开。
对于(int i=0;iInteger.parseInt(strNumbers[i+1])){
增加=错误;
break;//退出循环
}
}
如果(增加)System.out.println(“真”);
else System.out.println(“假”);
我将为您描述解决方案,但您必须编写代码
您知道输入字符串是一系列递增的数字,但不知道第一个数字中有多少位
这意味着您首先假设它是1位数字。如果失败,您可以尝试2位数字,然后是3位,依此类推,直到您尝试了整个输入长度的一半。你停在一半,因为任何超过一半的东西后面都不能有下一个数字
如果你的外循环,尝试第一个数字的长度从1开始
在循环中,使用提取第一个数字,并使用将其解析为一个数字。这是序列的第一个数字
然后启动另一个(内部)循环,一次递增一个数字,使用将数字格式化为文本,并检查输入的下N个字符(使用子字符串(begin,end)
提取)是否匹配。若不匹配,则退出内部循环,让外部循环尝试下一个较大的初始值
如果所有递增的数字都与输入字符串的长度完全匹配,则表明您找到了一个良好的序列。这是Andreas建议的伪代码的代码。感谢您的帮助
for (int a0 = 0; a0 < q; a0++) {
String s = in.next();
boolean flag = true;
for (int i = 1; i < s.length() / 2; i++) {
int first = Integer.parseInt(s.substring(0, i));
int k=1;
for (int j = i; j < s.length(); j++) {
if (Integer.toString(first + (k++)).equals(s.substring(j, j + i)))
flag = true;
else{
flag=false;
break;
}
}
if (flag)
System.out.println("YES");
else
System.out.println("NO");
}
for(int a0=0;a0
我建议以下解决方案。此代码生成输入序列的所有子字符串,根据它们的开始索引对它们进行排序,然后检查是否存在从开始索引到结束索引的路径,在该路径上显示的所有数字都是按顺序排列的。但是,我注意到一个错误(我想是吧?)在您的示例中:10203
也应计算为true
,因为10e.val)。收集
(Collectors.toSet());
}
返回false;
}
}
我认为实现所需结果的最佳方法是不使用空格分隔输入字符串。例如999,它可以解释为:9、99、99或999Please learning格式化(缩进)代码以便于人类阅读。一、 就个人而言,拒绝这样看代码,祝你好运。@DenIsahac。谢谢你的回复。但是如何确定在字符串开头应该考虑3位数字(999)或2位数字(99)或1位数字(9)。这很令人困惑。请给我一个建议。@Andreas。我是新用户,所以为了便于阅读,我缩进了代码。早些时候我不知道怎么做,但我学得很快。请帮忙回答这个问题。谢谢,但是字符串之间没有空格。所有数字都是相互连接的。这就是为什么这是一个困难的问题,这是行不通的。
boolean increasing = true;
String string = "1 7 3 4"; // CHANGE NUMBERS
String strNumbers[] = string.split(" "); // separate by spaces.
for(int i = 0; i < strNumbers.length - 1; i++) {
// if current number is greater than the next number.
if(Integer.parseInt(strNumbers[i]) > Integer.parseInt(strNumbers[i + 1])) {
increasing = false;
break; // exit loop
}
}
if(increasing) System.out.println("TRUE");
else System.out.println("FALSE");
for (int a0 = 0; a0 < q; a0++) {
String s = in.next();
boolean flag = true;
for (int i = 1; i < s.length() / 2; i++) {
int first = Integer.parseInt(s.substring(0, i));
int k=1;
for (int j = i; j < s.length(); j++) {
if (Integer.toString(first + (k++)).equals(s.substring(j, j + i)))
flag = true;
else{
flag=false;
break;
}
}
if (flag)
System.out.println("YES");
else
System.out.println("NO");
}
import java.util.*;
import java.util.stream.Collectors;
public class PlayGround {
private static class Entry {
public Entry(int sidx, int eidx, int val) {
this.sidx = sidx;
this.eidx = eidx;
this.val = val;
}
public int sidx = 0;
public int eidx = 0;
public int val = 0;
@Override
public String toString(){
return String.valueOf(this.val);
}
}
public static void main(String[] args) {
assert(check("1234"));
assert(check("9101112"));
assert(check("9991000"));
assert(check("10203"));
}
private static boolean check(String seq) {
TreeMap<Integer,Set<Entry>> em = new TreeMap();
// compute all substrings of seq and put them into tree map
for(int i = 0; i < seq.length(); i++) {
for(int k = 1 ; k <= seq.length()-i; k++) {
String s = seq.substring(i,i+k);
if(s.startsWith("0")){
continue;
}
if(!em.containsKey(i))
em.put(i, new HashSet<>());
Entry e = new Entry(i, i+k, Integer.parseInt(s));
em.get(i).add(e);
}
}
if(em.size() <= 1)
return false;
Map.Entry<Integer,Set<Entry>> first = em.entrySet().iterator().next();
LinkedList<Entry> wlist = new LinkedList<>();
wlist.addAll(first.getValue().stream().filter(e -> e.eidx < seq
.length()).collect(Collectors.toSet()));
while(!wlist.isEmpty()) {
Entry e = wlist.pop();
if(e.eidx == seq.length()) {
return true;
}
int nidx = e.eidx + 1;
if(!em.containsKey(nidx))
continue;
wlist.addAll(em.get(nidx).stream().filter(n -> n.val > e.val).collect
(Collectors.toSet()));
}
return false;
}
}