Java 如果给定的字母 1 不存在,如何打印 -1
Java How to print -1 if the given letter1 is not present
我想编写一个程序,从两个字符串 string1 和 string2 中获取字母位置,然后它会检查 string2 中我们使用相同字母的位置,还会打印索引数,如果没有字母那是在第一个字符串中只是打印 -1 。例如我有第一个字符串 = "reds" 第二个 = "Hello world!",那么我的输出应该是:
r: 8, e: 1, d: 10, s: -1
这是我的代码:
public static void main(String[] args){
String set1 = "reds";
String set2 = "Hello world!";
for(int i = 0; i < set1.length(); i++)
{
for(int j = 0; j < set2.length();j++)
{
char currentChar = set1.charAt(i);
char currentChar2 = set2.charAt(j);
if(currentChar == currentChar2)
{
System.out.println(currentChar+": "+j);
}
}
}
}
}
public static void main(String[] args){
String set1 = "reds";
String set2 = "Hello world!";
for(int i = 0; i < set1.length(); i++) {
char currentChar = set1.charAt(i);
boolean found = false;
for(int j = 0; j < set2.length();j++) {
char currentChar2 = set2.charAt(j);
if(currentChar == currentChar2) {
System.out.println(currentChar+": "+j);
found = true;
}
}
if(!found) {
System.out.println(currentChar + ": -1");
}
}
}
另一种使用方式String.indexOf
经典for循环
String set1 = "reds";
String set2 = "Hello world!";
for(int i = 0; i < set1.length(); i++){
System.out.println(set1.charAt(i) + " : " + set2.indexOf(set1.charAt(i)));
}
或流
set1.chars()
.mapToObj(c -> (char)c + " : " + set2.indexOf(c))
.forEach(System.out::println);
注意:如果字符在第二个字符串中出现多次,则打印字符的第一个索引(如果需要最后一个索引,请使用 lastIndexOf
)
它将set1字符的每个位置打印到set2中。
O(n + m)时间复杂度,其中n和m是set1和set2的大小
O(256) space 由于 ASCII 数字的复杂性
public static void main(String[] args){
String set1 = "reds";
String set2 = "Hello world!";
Map<Integer, List<Integer>> map = new HashMap<>(); // key = ascii value of the char, value = list of indexes
for(int i = 0; i < set2.length(); i++){
int key = set2.charAt(i);
if(!map.containsKey(key)){
map.put(key, new ArrayList<>());
}
List<Integer> indexesList = map.get(key);
indexesList.add(i);
map.put(key, indexesList);
}
for(int i = 0; i < set1.length(); i++){
int key = set1.charAt(i);
System.out.print(set1.charAt(i) + ": ");
if(!map.containsKey(key)){
System.out.println(-1);
}
else {
map.get(key).forEach(x-> System.out.print(x+ " "));
System.out.println(); // just for new line
}
}
}
我想编写一个程序,从两个字符串 string1 和 string2 中获取字母位置,然后它会检查 string2 中我们使用相同字母的位置,还会打印索引数,如果没有字母那是在第一个字符串中只是打印 -1 。例如我有第一个字符串 = "reds" 第二个 = "Hello world!",那么我的输出应该是: r: 8, e: 1, d: 10, s: -1
这是我的代码:
public static void main(String[] args){
String set1 = "reds";
String set2 = "Hello world!";
for(int i = 0; i < set1.length(); i++)
{
for(int j = 0; j < set2.length();j++)
{
char currentChar = set1.charAt(i);
char currentChar2 = set2.charAt(j);
if(currentChar == currentChar2)
{
System.out.println(currentChar+": "+j);
}
}
}
}
}
public static void main(String[] args){
String set1 = "reds";
String set2 = "Hello world!";
for(int i = 0; i < set1.length(); i++) {
char currentChar = set1.charAt(i);
boolean found = false;
for(int j = 0; j < set2.length();j++) {
char currentChar2 = set2.charAt(j);
if(currentChar == currentChar2) {
System.out.println(currentChar+": "+j);
found = true;
}
}
if(!found) {
System.out.println(currentChar + ": -1");
}
}
}
另一种使用方式String.indexOf
经典for循环
String set1 = "reds";
String set2 = "Hello world!";
for(int i = 0; i < set1.length(); i++){
System.out.println(set1.charAt(i) + " : " + set2.indexOf(set1.charAt(i)));
}
或流
set1.chars()
.mapToObj(c -> (char)c + " : " + set2.indexOf(c))
.forEach(System.out::println);
注意:如果字符在第二个字符串中出现多次,则打印字符的第一个索引(如果需要最后一个索引,请使用 lastIndexOf
)
它将set1字符的每个位置打印到set2中。
O(n + m)时间复杂度,其中n和m是set1和set2的大小
O(256) space 由于 ASCII 数字的复杂性
public static void main(String[] args){
String set1 = "reds";
String set2 = "Hello world!";
Map<Integer, List<Integer>> map = new HashMap<>(); // key = ascii value of the char, value = list of indexes
for(int i = 0; i < set2.length(); i++){
int key = set2.charAt(i);
if(!map.containsKey(key)){
map.put(key, new ArrayList<>());
}
List<Integer> indexesList = map.get(key);
indexesList.add(i);
map.put(key, indexesList);
}
for(int i = 0; i < set1.length(); i++){
int key = set1.charAt(i);
System.out.print(set1.charAt(i) + ": ");
if(!map.containsKey(key)){
System.out.println(-1);
}
else {
map.get(key).forEach(x-> System.out.print(x+ " "));
System.out.println(); // just for new line
}
}
}