第一题: String s = "字符串"; for (int r = 0; r < s.length()-1; r++) { for (int i = r + 1; i <= s.length(); i++) { if (i <= s.length()) { String dd = s.substring(r, i); if (s.indexOf(dd) != -1) { String tmps = s.replaceAll(dd, ""); int len=(s.length()-tmps.length())/dd.length(); if(len>1){//只有大于一次的才记录 System.out.println(dd+"重复出现的次数:"+len); }
public class Test { public static void main(String[] args) { while (true) { BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); System.out.println("请输入你要查找的字符串,如要结束请键入END:"); String s = ""; try { s = br.readLine(); if (s.equals("END") || s.equals("end")) { System.out.println("退出程序"); System.exit(0); } for (int r = 0; r < s.length()-1; r++) { for (int i = r + 1; i <= s.length(); i++) { if (i <= s.length()) { String dd = s.substring(r, i); if (s.indexOf(dd) != -1) { String tmps = s.replaceAll(dd, ""); int len=(s.length()-tmps.length())/dd.length(); if(len>1){//只有大于一次的才记录 System.out.println(dd+"重复出现的次数:"+len); }
String s = "字符串";
for (int r = 0; r < s.length()-1; r++) {
for (int i = r + 1; i <= s.length(); i++) {
if (i <= s.length()) {
String dd = s.substring(r, i);
if (s.indexOf(dd) != -1) {
String tmps = s.replaceAll(dd, "");
int len=(s.length()-tmps.length())/dd.length();
if(len>1){//只有大于一次的才记录
System.out.println(dd+"重复出现的次数:"+len);
}
}
}
}
public static void main(String[] args) {
while (true) {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("请输入你要查找的字符串,如要结束请键入END:");
String s = "";
try {
s = br.readLine();
if (s.equals("END") || s.equals("end")) {
System.out.println("退出程序");
System.exit(0);
}
for (int r = 0; r < s.length()-1; r++) {
for (int i = r + 1; i <= s.length(); i++) {
if (i <= s.length()) {
String dd = s.substring(r, i);
if (s.indexOf(dd) != -1) {
String tmps = s.replaceAll(dd, "");
int len=(s.length()-tmps.length())/dd.length();
if(len>1){//只有大于一次的才记录
System.out.println(dd+"重复出现的次数:"+len);
}
}
}
}
}
} catch (IOException e) {
System.out.println("程序出错:" + e.getMessage());
}
}
}
}
楼主是“已知一个随机生成a到b的函数randomAB(), 用它去实现一个随机生成c到d的函数randomCD()”这个意思嘛?
最不好想的一种是这个输入:abcdefabcmodef
上代码:
import java.util.ArrayList;/**
* <p>Title: TestString</p>
* <p>Description: 输入字符串,最长重复次数的字符串,并计算其重复次数。空格也当字符处理</p>
* @params
* @author ZhengBing (2014-8-21 下午4:12:17)
*/
public class TestString { public static void main(String[] args) {
//String s = "abcabdabcmpoer";//结果为:重复字符串:abc,重复次数:2
//String s = "abcdefabcmodef";//结果为:重复字符串:abc,重复次数:2
//重复字符串:def,重复次数:2
String s = "abcdyyyyopqrstabcdiiiiabcdoooopqrst";//结果为:重复字符串:opqrst,重复次数:2
ArrayList<String> subStrings = new ArrayList<String>();
int count = 0;
for (int i = 0; i < s.length(); i++) {
for (int j = i + 1; j <= s.length(); j++) {
String sub = s.substring(i, j);
int c = (s.length() - s.replaceAll(sub, "").length()) / sub.length();
if (subStrings.size() == 0) {
if (c > 1) {
subStrings.add(sub);
count = c;
}
} else {
if (sub.length() > subStrings.get(0).length() && c > 1) {
subStrings.clear();
subStrings.add(sub);
count = c;
} else if (sub.length() == subStrings.get(0).length() && c == count) {
if (!subStrings.contains(sub))
subStrings.add(sub);
}
}
if (j - i - 1 >= s.length() / 2)
break;
}
}
if (subStrings.size() == 0) {
System.out.println("未找到重复字符串。");
} else {
for (int i = 0; i < subStrings.size(); i++) {
System.out.println("重复字符串:" + subStrings.get(i) + ",重复次数:" + count);
}
}
}
}
abc重复出现的次数:2
b重复出现的次数:2
bc重复出现的次数:2
c重复出现的次数:2
d重复出现的次数:2
de重复出现的次数:2
def重复出现的次数:2
e重复出现的次数:2
ef重复出现的次数:2
abc重复出现的次数:2
b重复出现的次数:2
bc重复出现的次数:2
c重复出现的次数:2
d重复出现的次数:2
de重复出现的次数:2
def重复出现的次数:2
e重复出现的次数:2
ef重复出现的次数:2
你这程序只能算是完成了一半
内层循环没必要循环到 i <= s.length(),一半就可以了,比如:
if (i - r - 1 >= s.length() / 2)break;
public static void main(String[] args) {
final String chaine = "abc fghi bc kl abcd lkm abcdefg";
String[] arr = chaine.split(" ");
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.length() != o2.length()) {
return o1.length() < o2.length() ? -1 : 1;
}
return o1.compareTo(o2);
}
});
String theStr = arr[arr.length - 1];
Integer theSum = 1;
for (int i = arr.length - 2; i >=0; i--) {
String currentStr = arr[i];
Integer currentSum = 1;
for(int j = i+1; j < arr.length; j++) {
if (arr[j].contains(currentStr))
currentSum++;
}
if (currentSum > 1) {
theStr = currentStr;
theSum = currentSum;
if (i == 0 || arr[i - 1].length() < currentStr.length())
break;
}
}
System.out.println( theStr + " : " + theSum);
}
abc重复出现的次数:2
b重复出现的次数:2
bc重复出现的次数:2
c重复出现的次数:2
d重复出现的次数:2
de重复出现的次数:2
def重复出现的次数:2
e重复出现的次数:2
ef重复出现的次数:2
你这程序只能算是完成了一半
内层循环没必要循环到 i <= s.length(),一半就可以了,比如:
if (i - r - 1 >= s.length() / 2)break;恩,我之前没考虑那么多... 因为只要是字符就循环出来了