描述:
假如有一个字符串是trg32er43terjjk它的最长子字符串是terjjk
查找字符串中最长子字符串
package testClass;
import java.util.ArrayList;
import java.util.List;
/**
* 获取最长字符串
* duay
* 20220325
*/
public class MaxLengthString {
//存放最大子字符串的下标数组
List<Integer> maxList = new ArrayList<>();
//将是字符串的下标添加到数组中
List<Integer> index = new ArrayList<>();
public static void main(String[] args) {
MaxLengthString ml = new MaxLengthString();
String moreStr = ml.moreLine("das12sa\nhd2ji\n2sd0def\nsd2sadsada9d");
System.out.println(moreStr);
}
//输出多行
public String moreLine(String str){
String[] strs = str.split("\n");
String string = "";
//判断一行还是多行
if(strs.length == 1){
string = getMaxSonSting(str);
}else{//多行
//输出每一行
for(int i = 0; i < strs.length; i++){
//显示最长的字符串
String sonStr = getMaxSonSting(strs[i]);
string += sonStr + "\n";
maxList = new ArrayList<>();
}
}
return string;
}
//获取最长的子字符串
public String getMaxSonSting(String str){
char[] chars = charArray(str);
findMaxSonString(chars);
String sonStr = "";
for(int i = 0; i < maxList.size(); i++){
sonStr += chars[maxList.get(i)];
}
return sonStr;
}
//找到最长的子字符串
public void findMaxSonString(char[] chars){
for(int i = 0; i < chars.length; i++){
boolean result = Character.toString(chars[i]).matches("[A-Za-z]");
if(result == true){
index.add(i);
}else {
if(index.size() > maxList.size()){
maxList = index;
index = new ArrayList<>();
}
index = new ArrayList<>();
}
}
if(index.size() > maxList.size()){
maxList = index;
}
index = new ArrayList<>();
}
//将其中一个父字符串转化为字符数组
public char[] charArray(String strOne){
char[] chars = strOne.toCharArray();
return chars;
}
}
查找字符串中最长子字符串的长度
package testClass;
/**
* 查找字符串的最长子字符串的长度
* duay
*/
public class MaxLengthStringNumber {
//最大子字符串的长度
int maxString;
//连续子字符串的长度
int strLength;
public static void main(String[] args) {
MaxLengthStringNumber ms = new MaxLengthStringNumber();
String num = ms.moreLine("das12sa\nhd2ji\n2sd0def\nsd2sadsada9d");
System.out.println("字符串的子字符串的最长数据:" + num);
}
public String moreLine(String str){
String[] strs = str.split("\n");
String num = "";
//判断输入的是一行还是多行
if(strs.length == 1){
//获取最长子字符串的长度
String maxSonStringLength = String.valueOf(getSonStringMaxLength(str));
num = maxSonStringLength;
}else{//多行
//输出每行
for(int i = 0; i < strs.length; i++){
//获取最长的子字符串的长度
String maxSonStringLength = String.valueOf(getSonStringMaxLength(strs[i]));
num += maxSonStringLength + "\n";
strLength = 0;
maxString = 0;
}
}
return num;
}
//获取最长的子字符串的长度
public int getSonStringMaxLength(String str){
char[] chars = charArray(str);
for(int i = 0; i < chars.length; i++){
boolean result = Character.toString(chars[i]).matches("[A-Za-z]");
if(result == true){
strLength++;
}else{
maxString = Math.max(maxString, strLength);
strLength = 0;
}
maxString = Math.max(maxString, strLength);
}
return maxString;
}
//将其中一个父字符串转化为字符数组
public char[] charArray(String strOne){
char[] chars = strOne.toCharArray();
return chars;
}
}
将上面的两个结果合并打印
package testClass;
import java.util.List;
public class FindStringResult {
public static void main(String[] args) {
result();
System.out.println("------------------------------------------------------------------------------------------");
result2();
}
public static void result(){
MaxLengthStringNumber ms = new MaxLengthStringNumber();
String num = ms.moreLine("das12sa\nhd2ji\n2sd0def\nsd2sadsada9d");
MaxLengthString ml = new MaxLengthString();
String moreStr = ml.moreLine("das12sa\nhd2ji\n2sd0def\nsd2sadsada9d");
System.out.print(num);
System.out.println();
System.out.print(moreStr);
}
public static void result2(){
String res = "";
MaxLengthStringNumber ms = new MaxLengthStringNumber();
String num = ms.moreLine("das12sa\nhd2ji\n2sd0def\nsd2sadsada9d");
MaxLengthString ml = new MaxLengthString();
String moreStr = ml.moreLine("das12sa\nhd2ji\n2sd0def\nsd2sadsada9d");
String[] numString = num.split("\n");
String[] stringStr = moreStr.split("\n");
for (int i = 0; i < num.split("\n").length; i++){
String row = numString[i] + " " + stringStr[i];
res += row + "\n";
}
System.out.println(res);
}
}
如果愿意加微信群一块讨论学习研究技术:Day9884125