我编写了以下 for 循环来显示所提供单词的所有子字符串。然而,要求之一是单词到一仅显示唯一的子字符串。如果“mom”给出以下代码,它会将长度为 1 的子字符串显示为“m”、“o”和“m”,从而给出“m”的重复项。您将如何确保只打印唯一的子字符串?
public static void allUniqueSubStrings(String str) {
for (int i = 1; i <= str.length(); i++) {
for (int j = 0; j + i <= str.length(); j++) {
String s = str.substring(j, i+j);
System.out.println(s);
}
}
}
最佳答案
尝试以下代码。它应该按照您的要求工作。
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;
final public class Main
{
public static void main(String...args)
{
String string, sub;
ArrayList<String>al=new ArrayList<String>();
int i, c, length;
Scanner in = new Scanner(System.in);
System.out.print("Enter a string to print it's all unique substrings:->");
string = in.nextLine();
length = string.length();
System.out.print("Substrings of \""+string+"\" are :->");
for(c=0;c<length;c++)
{
for(i=1;i<=length-c;i++)
{
sub = string.substring(c,c+i);
al.add(sub);
}
}
HashSet hs = new HashSet();
hs.addAll(al);
al.clear();
al.addAll(hs);
for(String str:al)
{
System.out.println(str);
}
}
}
删除重复元素的最简单方法是将内容添加到不允许重复的 Set
中,然后将 Set 添加回 ArrayList
关于Java - For循环显示所有唯一子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8695223/