我是新来的,还在学习.今天我学会了在字符串中查找重复项.从https://www.javatpoint.com/program-to-find-the-duplicate-characters-in-a-string岁开始,我试着从网上学习完整的代码.

当string="Great responsibility"时,输出为:

 Duplicate characters in a given string: 
r
e
t
s
i

因为它有重复的字符

当字符串"很棒"时,输出是

 Duplicate characters in a given string: 

输出是空白的,因为没有重复的字符,所以我给出了一个描述"无重复"来定义无字符重复,输出如下

Duplicate characters in a given string: 
no duplicates
no duplicates
no duplicates
no duplicates
no duplicates

这会返回太多描述.

我的密码

public class DuplicateCharacters {  
    public static void main(String[] args) {  
        String string1 = "Great";  
        int count;  
          
        //Converts given string into character array  
        char string[] = string1.toCharArray();  
          
        System.out.println("Duplicate characters in a given string: ");  
        //Counts each character present in the string  
        for(int i = 0; i <string.length; i++) {  
            count = 1;  
            for(int j = i+1; j <string.length; j++) {  
                if(string[i] == string[j] && string[i] != ' ') {  
                    count++;  
                    //Set string[j] to 0 to avoid printing visited character  
                    string[j] = '0';  
                }  
            }  
            //A character is considered as duplicate if count is greater than 1  
            if(count > 1 && string[i] != '0')  
                System.out.println(string[i]);  
            else 
             System.out.println("no duplicates"); 
        }  
    }  
} 

如何只打印一个描述而不重复?我try 返回0;但它不起作用.

预期yields

Duplicate characters in a given string: 
no duplicates

推荐答案

在程序中添加一个标志,指示是否存在重复项.循环之后,判断这个标志是true还是false.

这个方法如下所示.我在更新代码的地方对代码进行了注释.

public static void main(String[] args) {
    String string1 = "Great";
    int count;

    //Converts given string into character array
    char string[] = string1.toCharArray();

    // here is flag added
    boolean noDuplicates = true;

    System.out.println("Duplicate characters in a given string: ");
    //Counts each character present in the string
    for(int i = 0; i <string.length; i++) {
      count = 1;
      for(int j = i+1; j <string.length; j++) {
        if(string[i] == string[j] && string[i] != ' ') {
          count++;
          //Set string[j] to 0 to avoid printing visited character
          string[j] = '0';
        }
      }
      //A character is considered as duplicate if count is greater than 1
      if(count > 1 && string[i] != '0') {
        System.out.println(string[i]);

        //here is flag updated if duplicates are found
        noDuplicates = false;
      }
    }

    //here is flag check
    if (noDuplicates) {
      System.out.println("no duplicates");
    }
  }

顺便说一句,你的算法有O(n^2)的时间复杂度.你可以找出一个更好的;-)

Java相关问答推荐

Java应用程序崩溃时试图读取联系人从电话

Jooq外键关系

Spring Batch 5-不要让它在数据库中自动创建表

使用java访问具体子类特定方法的最佳方法是什么?

为什么我要创建一个单独的互斥体/锁对象?

R.id.main给我一个红色错误,无法解析MainActivity.java中的符号main

CompleteableFuture是否运行在不同的内核上?

更新GWT 2.5.1到2.11.0和sencha GXT 3.1.1到4.1时出现错误

Jolt变换JSON数组问题

使SLF4J在Android中登录到Logcat,在测试中登录到控制台(Gradle依赖问题)

如何创建模块信息类文件并将其添加到JAR中?

在Oracle db中,当我们提供字符串而不是数字时,比较是如何工作的?

为什么创建Java动态代理需要接口参数

如何在Spring Boot中为不同的部署环境管理多个.properties文件?

字符串的Gzip压缩在java11和java17中给出了不同的结果

多线程、并发和睡眠未按预期工作

在java中使用SevenZip.openArchive方法后无法删除文件

为什么 Random() 的行为不符合预期?

如何在Java中调用对象上预定义的接口方法列表?

setMaxTotal实际上是做什么的? (MySQL与Java和Apache BasicDataSource连接池)