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;
}
}
运行结果如下:
您要是方便就给写一下代码 和例子的程序运行截图。微信可以再给您打10块红包。。。
追答明天吧 今晚看来要加班 0.0 下面那个哥们写的挺好的 就是不知道他是否判断了 假如递增列长度相同的情况
本回答被网友采纳