给定字符串的不同子字符串
Distinct substrings for a given string
我正在尝试查找一个字符串的所有可能的不同子字符串。这是我当前的代码:
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
StringBuffer f = new StringBuffer();
//Get a string of possible substrings with out uniqueness
for (int i = 0; i < str.length(); i++) {
for (int j = i; j < str.length(); j++) {
f.append(str.charAt(j) + ",");
}
}
f.deleteCharAt(sb.length() - 1);
String s = f.toString();
String[] arr = s.Split(',');
arr = arr.Distinct().ToArray();
for (int i = 0; i < arr.length; i++)
System.out.println(arr[i]);
}
}
我在编译时收到多个错误。我不明白代码哪里出错了。我是忘记导入 class 还是语法错误?
Solution.java:28: error: cannot find symbol
f.deleteCharAt(sb.length()-1);
^
symbol: variable sb
location: class Solution
Solution.java:31: error: cannot find symbol
String[] arr = s.Split(',');
^
symbol: method Split(char)
location: variable s of type String
Solution.java:34: error: cannot find symbol
arr = arr.Distinct().ToArray();
^
symbol: method Distinct()
location: variable arr of type String[]
3 errors
下面是获取唯一值或不同值的有效方法。 HashSet 不允许重复,因此您可以先准备一个具有重复值的 ArrayList 并将其传递给 HashSet 的构造函数并删除所有重复项。
String[] str = {"A", "B", "A", "C", "D", "B"};
List<String> arrayList = Arrays.asList(str);;
System.out.println(arrayList);
HashSet<String> hashSet = new HashSet<String>(arrayList);
System.out.println(hashSet);
很难理解您的意图,但是当您说给定字符串的不同子字符串时,我认为您指的不是唯一字母。所以看看这个...
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
for (int i = 0; i < str.length(); i++) {
for (int j = i + 1; j < str.length() + 1; j++) {
String substring = str.substring(i, j);
if (str.indexOf(substring, i + substring.length()) == -1) {
System.out.println("Unique Substring: " + substring);
}
}
}
}
我用 "hello" 测试了这个,考虑到你对最后一个答案的评论。您会注意到第一个 "l"(小写 L)不是结果的一部分,因为下一个 "l"(小写 L),但第二个 "l"(小写 L ) 是一个唯一的子字符串。
这是您要找的吗?
我正在尝试查找一个字符串的所有可能的不同子字符串。这是我当前的代码:
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
StringBuffer f = new StringBuffer();
//Get a string of possible substrings with out uniqueness
for (int i = 0; i < str.length(); i++) {
for (int j = i; j < str.length(); j++) {
f.append(str.charAt(j) + ",");
}
}
f.deleteCharAt(sb.length() - 1);
String s = f.toString();
String[] arr = s.Split(',');
arr = arr.Distinct().ToArray();
for (int i = 0; i < arr.length; i++)
System.out.println(arr[i]);
}
}
我在编译时收到多个错误。我不明白代码哪里出错了。我是忘记导入 class 还是语法错误?
Solution.java:28: error: cannot find symbol
f.deleteCharAt(sb.length()-1);
^
symbol: variable sb
location: class Solution
Solution.java:31: error: cannot find symbol
String[] arr = s.Split(',');
^
symbol: method Split(char)
location: variable s of type String
Solution.java:34: error: cannot find symbol
arr = arr.Distinct().ToArray();
^
symbol: method Distinct()
location: variable arr of type String[]
3 errors
下面是获取唯一值或不同值的有效方法。 HashSet 不允许重复,因此您可以先准备一个具有重复值的 ArrayList 并将其传递给 HashSet 的构造函数并删除所有重复项。
String[] str = {"A", "B", "A", "C", "D", "B"};
List<String> arrayList = Arrays.asList(str);;
System.out.println(arrayList);
HashSet<String> hashSet = new HashSet<String>(arrayList);
System.out.println(hashSet);
很难理解您的意图,但是当您说给定字符串的不同子字符串时,我认为您指的不是唯一字母。所以看看这个...
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
for (int i = 0; i < str.length(); i++) {
for (int j = i + 1; j < str.length() + 1; j++) {
String substring = str.substring(i, j);
if (str.indexOf(substring, i + substring.length()) == -1) {
System.out.println("Unique Substring: " + substring);
}
}
}
}
我用 "hello" 测试了这个,考虑到你对最后一个答案的评论。您会注意到第一个 "l"(小写 L)不是结果的一部分,因为下一个 "l"(小写 L),但第二个 "l"(小写 L ) 是一个唯一的子字符串。
这是您要找的吗?