Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串java中的递增数字序列_Java_Algorithm_Greedy - Fatal编程技术网

字符串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;
    }
}