三道java编程题。求全部代码和执行截图。

0-9的数字列,一列中数字增加的部分叫做增加部分。求数字列中最长的增加部分。
例子:输入:134297381 之后 可以得到 134

0或1的一列数字列,一列里 值相同的那部分叫同值部分。求这列中最长的同值部分。
例子:输入:011011100 之后 可以得到 111

阿拉伯字母(a-z,A-Z)的文字列,文字列中同样文字连续的叫文字部分(大小写区分)。求文字列中最长的那部分
例子:输入:aaBBBcC 之后 可以得到BBB

  public class JavaPractise {

  public static void main(String[] args) {

  JavaPractise o = new JavaPractise();

  String str = "1342973451345";

  String subStr = o.getMaxLengthAddPart(str);

  System.out.println(subStr);

  String binaryFlow = "000011110000011111";

  String sameSubStr = o.getMaxSameSubStr(binaryFlow);

  System.out.println(sameSubStr);

  String letterFlow = "aaBBBcCCCCddddddEEEE";

  String sameLettersSubStr = o.getMaxSameLettersSubStr(letterFlow);

  System.out.println(sameLettersSubStr);

  }

  /**

  * 校验字符串是否符合数字规范

  * */

  private boolean isNum(String str){

  boolean result = true;

  if(str.length() < 1)

  return false;

  for(int i = 0 ; i < str.length(); i ++){

  if(str.charAt(i) < '0' ||  str.charAt(i) > '9')

  return false;

  }

  return result;

  }

  private boolean isBinaryFlow(String binaryFlow){

  boolean result = true;

  if(binaryFlow.length() < 1)

  return false;

  for(int i = 0 ; i < binaryFlow.length(); i ++){

  if(binaryFlow.charAt(i) !=  '0' &&  binaryFlow.charAt(i) != '1')

  return false;

  }

  return result;

  }

  private boolean isLetterFlow(String letterFlow){

  boolean result = true;

  if(letterFlow.length() < 1)

  return false;

  for(int i = 0 ; i < letterFlow.length(); i ++){

  char cur = letterFlow.charAt(i);

  if(!( ('z'>= cur && cur >= 'a') || ('Z' >= cur && cur > 'A') ) )

  return false;

  }

  return result;

  }

  /**

  * 获取最长增长数字的子串

  * */

  private String getMaxLengthAddPart(String str){

  str = str.trim();

  if(!isNum(str))

  return "";

  String temp = ""+str.charAt(0);

  String maxSubStr = temp;

  for(int i = 1; i < str.length(); i++){

  char curChar = str.charAt(i);

  char lastChar = str.charAt(i-1);

  if( curChar > lastChar){

  temp += curChar;

  if(i != (str.length()-1))

  continue;//如果当前节点为最后一个节点,那么强制进入下面环节,进行

  }

  maxSubStr = maxSubStr.length()> temp.length() ? maxSubStr : temp;

  temp = ""+curChar; //清空原数据,并从当前节点记录

  }

  return maxSubStr;

  }

  /**

  * 二进制流最长字符串判定

  * */

  private String getMaxSameSubStr(String str){

  str = str.trim();

  if(!isBinaryFlow(str))

  return "";

  String temp = ""+str.charAt(0);

  String maxSubStr = temp;

  for(int i = 1; i < str.length(); i++){

  char curChar = str.charAt(i);

  char lastChar = str.charAt(i-1);

  if( curChar == lastChar){

  temp += curChar;

  if(i != (str.length()-1))

  continue;//如果当前节点为最后一个节点,那么强制进入下面环节,进行

  }

  maxSubStr = maxSubStr.length()> temp.length() ? maxSubStr : temp;

  temp = ""+curChar; //清空原数据,并从当前节点记录

  }

  return maxSubStr;

  }

  /**

  * 字符串的最长相同部分截取

  * */

  private String getMaxSameLettersSubStr(String str){

  str = str.trim();

  if(!isLetterFlow(str))

  return "";

  String temp = ""+str.charAt(0);

  String maxSubStr = temp;

  for(int i = 1; i < str.length(); i++){

  char curChar = str.charAt(i);

  char lastChar = str.charAt(i-1);

  if( curChar == lastChar){

  temp += curChar;

  if(i != (str.length()-1))

  continue;//如果当前节点为最后一个节点,那么强制进入下面环节,进行

  }

  maxSubStr = maxSubStr.length()> temp.length() ? maxSubStr : temp;

  temp = ""+curChar; //清空原数据,并从当前节点记录

  }

  return maxSubStr;

  }


  }

运行结果如下:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-06-27
这个其实是一个思路 如第一个题目
int [] a 保存列开始的下标数组 用数组是因为可能有相同长度的
int [] b 保存列结束的下标数组 理由同上
int sum 长度
循环 判断 a[n+1]>a[n] 条件成功 sum+1
第一次 记录 开始下标a 结束下标b 长度sum
从结束下标继续找 如果下个递增列长度<第一个长度sum continue
如果下个递增列长度=第一个长度sum 在数组中添加开始下标 结束下标
如果下个递增列长度>sum 清空数组a 数组b 把下标添加到数组
直至循环完成追问

您要是方便就给写一下代码 和例子的程序运行截图。微信可以再给您打10块红包。。。

追答

明天吧 今晚看来要加班 0.0 下面那个哥们写的挺好的 就是不知道他是否判断了 假如递增列长度相同的情况

本回答被网友采纳
第2个回答  2016-06-27
//第一题
import java.util.*;
public class One {
public static void main(String args[]){
Scanner reader=new Scanner(System.in);
System.out.println("请输入这串数字:");
String str=reader.next().trim();
int lowI=0;
int maxLength=1;
int nowLength=1;
for(int i=0;i<str.length()-1;i++){
if(str.charAt(i)<str.charAt(i+1)){
nowLength++;
}else{
if(maxLength<nowLength){
maxLength=nowLength;
lowI=i-maxLength+1;
}
nowLength=1;
}
}
for(int i=lowI;i<(lowI+maxLength);i++){
System.out.print(str.charAt(i));
}
}
}
//第二题 差别不大 就差一个符号
import java.util.Scanner;

public class Two {
public static void main(String args[]){
Scanner reader=new Scanner(System.in);
System.out.println("请输入这串数字:");
String str=reader.next().trim();
int lowI=0;
int maxLength=1;
int nowLength=1;
for(int i=0;i<str.length()-1;i++){
if(str.charAt(i)==str.charAt(i+1)){
nowLength++;
}else{
if(maxLength<nowLength){
maxLength=nowLength;
lowI=i-maxLength+1;
}
nowLength=1;
}
}
for(int i=lowI;i<(lowI+maxLength);i++){
System.out.print(str.charAt(i));
}
}
}
//第三题 差别也不大
import java.util.Scanner;

public class Three {
public static void main(String args[]){
Scanner reader=new Scanner(System.in);
System.out.println("请输入这串字母:");
String strSource=reader.next().trim();
String str=strSource.toUpperCase();
int lowI=0;
int maxLength=1;
int nowLength=1;
for(int i=0;i<str.length()-1;i++){
if(str.charAt(i)==str.charAt(i+1)){
nowLength++;
}else{
if(maxLength<nowLength){
maxLength=nowLength;
lowI=i-maxLength+1;
}
nowLength=1;
}
}
for(int i=lowI;i<(lowI+maxLength);i++){
System.out.print(strSource.charAt(i));
}
}
}
以下为截图:

相似回答